收录日期:2018/11/19 05:28:32 时间: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解决了,谢谢大家的解答

我安装APACHE时,出现了错误: Win2000 中软盘缓存去不掉 在我安装APACHE时,出现了错误:大哥们请回答 是程序员+球迷+彩(财)迷的快来看@^@ 我正在做足球彩票投注的辅助分析软件... 我在看JEFF PROSISE的PROGRAMMING WITH MFC时有几句看不太懂,向各位请教。 怎样用Windows2000里面的boot.ini文件实现windows2000和Linux双引导? 我现在想学asp.net.我想请问一下,安装asp.net后,原来的asp还能不能运行??? 寻找能录制网上教学的软件?/??---高分相送。 怎么可以做一个无法结束的程序,就算到任务栏里也结不了!!! 请问那里有jsp的免费空间???? C++必须借助int或byte来对文件中的bit操作么 access 数据库在BCB5的工具中建立不了,用什么建立?? 把adsl modem 接到hub上面,在下面的lan中,都可以拨号,请问怎么做到! 一个30人左右小的软件公司到底是一个什么概念?小,小到了什么程度?您所在公司大约有多少人??? 吴文智,你在吗,能和你聊聊吗,我的QQ是16110792,E-mail 是jokingjun@hotmail.com 关于注册表的问题。 如何建列表控件,列表的内容来自数据库,单击右键可进行拷贝等功能 NOI分区联赛,我过了初赛,还有谁?认识一下? 我刚学 神呀,救救我吗?我的SQL崩溃了... 来吧,来踩爆这个论坛吧。。。 高分求解?如何获取另一个应用程序的命令行参数? 一个基类的指针赋以派生类对象后,用DELETE删除会有内存泄露吗? CArray 等类的用法 数据库问题,急,谢谢 ·········如何判断某一年是不是闰年? 哪有wise for windows installer的使用说明? SOS!!!!不同数据库之间的导入!!!!! 请教控件 用彩票分析软件,去买彩票效果如何?