收录日期:2019/03/21 00:18:58 时间: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专用的测试工具吗?例如测试内存、执行效率等等。 100分求点tag libraries的资料 这个问题不会难到大家都不会的程度吧!!!!!!!!!!! 280米的距离如果搞成局域网? 大家说说见过的界面最酷的软件如何。 老是提示\"newitem.SubItems(1)\"不存在为什么 newitem as listview clear case 4.X for linux 哪儿有down???(只能给20分) 如果知道treectrl某个节点的HTREEITEM ,如何通知treectrl使该节点成为被选中的项呢? 谁了解powersite?探讨一下好吗? 请教:MDTM 这个FTP命令是干什么用的? GetRecordCount()总是只得到一条记录,怎么办? 不死鸟,我是立早,收到请回话 在unix下如何用man命令查找system的功能? 牛虻,你还没死啊? 我的DELPHI启动之后,工具栏显示有问题,有答必给分。 我说是不该收拾收拾chris2001这个家伙了? 关于自动化的问题!有源代码,请大家帮忙看一下哪里出了问题在release模式下不能正常运行 ! 为什么显示乱码 我是谁谢谢 但我只有一个listview 这是为什么 很easy!char->CString 这个问题花不了你的多少时间,可是对我来说,却具有重大意义,因为从此我就可以进入Oracle的大门了:Oralce8.17在Win2000下的安装问题。 对你来说是一个很简单的问题 如何在weblogic6.0中使用javabean? 鄙人是初学编程的小小鸟!想冒昧结交一些程序大虾!qq:24214353 sun公司的java国际认证到底有没有用?那么贵值吗?讨论一下! am2000(最后一滴水):给你加分 我得猫在COM3上,怎样才能使他在COM2上 萧十一郎兄,求救!下载的ASA studio 7创建Table老提示“authenlication violcation”而失败! 近来我的参与分多了很多,不知道为什么???? 求援:原用PB6.5在SQL SERVER7上开发的程序如何最快转到ORACLE8i上???