收录日期:2019/01/17 21:40:52 时间:2016/07/11 15:00:38 标签:Java SE
我编写了一个向数据库中插入数据的类,编译时没有出错,也就是说语法上没有错,但运行时就报错了:
抛出的异常如下:java.sql.SQLException:[Microsoft][SQLServer 2000 Driver for JDBC][SQLServer]
在此上下文中不支持使用‘林时’。此处只允许使用常量、表达式或变量。不允许使用列明。。。。后面时一大堆的异常。
我的AspSql类源代码如下
import java.sql.*;
//import test.ShowTime;

/**
 * @author huangqin
 *
 */
public class AspSql {
    private String number;
    private String name;
    private String subject;
    private char sex;
    private String birthday;
    private int grade;
    private String context;    
    private final int maxSize=20;
    
    public     AspSql() throws InstantiationException,
    IllegalAccessException, ClassNotFoundException{
         number=new String("051118");
         name=new String("林时");
         subject=new String("计算机");
         sex='男';
         birthday=new String("1988-05-08");
         grade=80;
         context=new String("他是一个好学生");
        String userName="sa";
        //password
        String userPassword="";
        //The database name
        String dbName="xscj";
        //connect the string
        String url="jdbc:microsoft:sqlserver://localhost:1433;"+
        dbName+"?useUnicode=true&characterEncoding=GBK";
        Statement stmt=null;
        ResultSet result=null;
        Connection conn=null;
        String sql=null;
        
        try
        {
        Class.forName("com.microsoft.jdbc.sqlserver.SQLServerDriver").newInstance(); 
         conn=DriverManager.getConnection(url,userName,userPassword);      
        
        }
        catch(SQLException e)
        {
         System.out.print(e.toString());
        }
        try{
        stmt=conn.createStatement();
        }catch(SQLException e){
            e.printStackTrace();
        }
        try{
            //利用循环向数据库中插入数据
            for(int i=0;i<maxSize;i++)
            {   
                
                sql="insert into xs values("+number+","+name+","+birthday+","+sex+","+
                subject+","+grade+","+context+")";                            
                result=stmt.executeQuery(sql);
             }
        }catch(SQLException e){
            e.printStackTrace();
        }
        try{
        if(stmt!=null)
            stmt.close();
        if(conn!=null)
            conn.close();
        if(result!=null)
            result.close();
        }catch(SQLException e){
            e.printStackTrace();
        }
       
    }
    public static void main(String args[]) 
    throws InstantiationException, IllegalAccessException, ClassNotFoundException{
        AspSql aspsql=new AspSql();
    }
}

(还有创建的数据库中的表代码)所在的数据库时XSCJ:
create table xs(
xh char(8) not null primary key,
xm char(8) ,
xb char(1),
zy char(12),
cssj datetime ,
zxf int ,
bz varchar,);
go
你把"林时"改为英文字母看看还会报什么错...
然后把"?useUnicode=true&characterEncoding=GBK"去掉,使用平台默认字符集看看是否还有问题
还是不行,改了后它又提示不能使用linshi了,我估计不是那个错啊
jdbc:microsoft:sqlserver://localhost:1433后面+上的你数据库名
比如:
jdbc:microsoft:sqlserver://localhost:1433/splan 这样试下
呵呵,那大概是你少了''的缘故....
比如,你的句子还原出来是
insert into xs values(051118,林时,1988-05-08,男,计算机,80,他是一个好学生)
但是你数据库里要求char应该是'林时'....前边的纯数字要不要''对char不会有影响

后面你可能会碰到提示datetime/出生日期的问题,因为数据库的datetime类型似乎不是你的'1988-05-08'这个样子的
换一种驱动程序试试,

jdbc.driverClassName=net.sourceforge.jtds.jdbc.Driver
jdbc.url=jdbc:jtds:sqlserver://127.0.0.1:1433;DatabaseName=textSQL
jdbc.username=sa
jdbc.password=sa
引用 3 楼 anying2055 的回复:
jdbc:microsoft:sqlserver://localhost:1433后面+上的你数据库名 
比如: 
jdbc:microsoft:sqlserver://localhost:1433/splan 这样试下

我在后面加了数据库啊
引用 5 楼 myjava_024 的回复:
换一种驱动程序试试, 

jdbc.driverClassName=net.sourceforge.jtds.jdbc.Driver 
jdbc.url=jdbc:jtds:sqlserver://127.0.0.1:1433;DatabaseName=textSQL 
jdbc.username=sa 
jdbc.password=sa

4楼能说清楚一点吗?
友情up
友情up
把sql语句打出来,直接在数据库运行看能不能插入数据。
String url="jdbc:microsoft:sqlserver://localhost:1433;"+ 
        dbName+"?useUnicode=true&characterEncoding=GBK"; 
改成
String url="jdbc:microsoft:sqlserver://localhost:1433;databaseName="+ 
        dbName+"?useUnicode=true&characterEncoding=GBK";
试一下!
引用 11 楼 roonten 的回复:
String url="jdbc:microsoft:sqlserver://localhost:1433;"+ 
        dbName+"?useUnicode=true&characterEncoding=GBK"; 
改成 
String url="jdbc:microsoft:sqlserver://localhost:1433;databaseName="+ 
        dbName+"?useUnicode=true&characterEncoding=GBK"; 
试一下!

如果按你的做法就抛出不能打开该数据库的异常了.
引用 10 楼 likgui 的回复:
把sql语句打出来,直接在数据库运行看能不能插入数据。

我在数据库中用一下数据
insert into xs values('051117','林时','计算机','男','1985-04-05','80','的师傅说的')
go
能成功插入数据
引用 13 楼 huangqinqin 的回复:
引用 10 楼 likgui 的回复:
把sql语句打出来,直接在数据库运行看能不能插入数据。 
 
我在数据库中用一下数据 
insert into xs values('051117','林时','计算机','男','1985-04-05','80','的师傅说的') 
go 
能成功插入数据



sql="insert into xs values("+number+","+name+","+birthday+","+sex+","+ 
                subject+","+grade+","+context+")";                            
// 有问题,改成
sql="insert into xs values('"+number+"','"+name+"','"+birthday+"','"+sex+"','"+ 
                subject+"','"+grade+"','"+context+"')"; 
// 应该就没问题了!
        try{ 
            //利用循环向数据库中插入数据 
            for(int i=0;i <maxSize;i++) 
            {  
                
                sql="insert into xs values("+number+","+name+","+birthday+","+sex+","+ 
                subject+","+grade+","+context+")";                            
                result=stmt.executeQuery(sql); 
            } 

你是初学者吗?你自己看看.你给的是什么方法....这是查询的方法....
result=stmt.executeQuery(sql);  应该是 result=stmt.executeUpdate(sql); 
        try{ 
            //利用循环向数据库中插入数据 
            for(int i=0;i <maxSize;i++) 
            {  
                
                sql="insert into xs values("+number+","+name+","+birthday+","+sex+","+ 
                subject+","+grade+","+context+")";                            
                result=stmt.executeQuery(sql); 
            } 

你是初学者吗?你自己看看.你给的是什么方法....这是查询的方法....
result=stmt.executeQuery(sql);  应该是 result=stmt.executeUpdate(sql); 
引用 16 楼 nhApis 的回复:
        try{ 
            //利用循环向数据库中插入数据 
            for(int i=0;i <maxSize;i++) 
            {  
                
                sql="insert into xs values("+number+","+name+","+birthday+","+sex+","+ 
                subject+","+grade+","+context+")";                            
                result=stmt.executeQuery(sql); 
            } 

你是初学者吗?你自己看看.你给…

result=stmt.executeUpdate(sql); 这样错了吧,应该是stmt.executeUpdate(sql); 因为它返回的是int型。
我按你们的方法改了,但又提示说:【SQLServer 2000 Driver for JDBC】 【SQLServer】对象名'xs'无效。
难道还要管理工具中建立数据源?可我用的不是ODBC--JDBC呀。
up
sql语句不对,字符串要用单引号框起来

推荐用绑定变量preparedStatement.
引用 20 楼 liao82 的回复:
sql语句不对,字符串要用单引号框起来 

推荐用绑定变量preparedStatement.


对头,少很多烦恼,何必拼sql呢,多累
sql="insert into xs values("+number+","+name+","+birthday+","+sex+","+ 
                subject+","+grade+","+context+")";  改为
sql="insert into xs values('"+number+"','"+name+"','"+birthday+"','"+sex+"','"+ 
                subject+"','"+grade+"','"+context+"')";
拼接时少了''  
拼接时少单引号
谢谢啊,貌似是我的数据库中的数据和java中的数据在转换时出现了问题。
你要学着去调试错误   别动不动就把问题贴出来 
   
这问题都有:
sql="insert into xs values("+number+","+name+","+birthday+","+sex+","+ 
                subject+","+grade+","+context+")";                            
// 有问题,改成
sql="insert into xs values('"+number+"','"+name+"','"+birthday+"','"+sex+"','"+ 
                subject+"','"+grade+"','"+context+"')"; 
// 应该就没问题了!

    try{ 
            //利用循环向数据库中插入数据 
            for(int i=0;i <maxSize;i++) 
            {  
                
                sql="insert into xs values("+number+","+name+","+birthday+","+sex+","+ 
                subject+","+grade+","+context+")";                            
                result=stmt.executeQuery(sql); 
            } 

你自己看看.你给的是什么方法....这是查询的方法.... 
result=stmt.executeQuery(sql);  应该是 stmt.executeUpdate(sql); 
用PrepareStatement解决了,谢谢大家的解答

JAVA中StreamTokenizer类判断行结束标识的问题!!!!!!!!!!!! 如何动态控制DBGRID的列宽 输出xml文件时如何控制换行?(在线等) for循环自变量初始化的问题? javascript 里数学计算的问题 web表单form的作用是什么? 查找节点的问题 excle数据中出现奇怪的’符号,求救 如何打开一个路径选择对话框? 为什么,我的menu不能折叠 简单的html问题 comboBox.DataSource的问题? 我只安装MSDE可以建立和维护数据库吗? 数据库表设计问题 提问一个关于CAsyncSocket的问题 批处理文件的问题 关于学习WEB的问题`!本人没入门 智圣.诸葛孔明;凌威武.武圣.关云长 提问一个关于CAsyncSocket的问题 Excell2003联接字符串问题(高手请入啊) 有谁碰到过这样的问题? 中国简史(超级搞笑) 求一条SQL语句!(在线) 在线编辑器问题:ewebeditor3.7上传图片时为什么总提示“请选择一个有效的文件”啊,另一个编辑器innerHTML老把图片变成绝对地址??? 怎么用程序启动服务? 求:最有效的存取一个大于2万条记录的数组,不用数据库 using System.Configuration;是做什么用的 请问,如何屏蔽弹出窗口的记记忆功能,请指教? 怎么监视系统正在打开的文档? 请教,在线等