我编写了一个向数据库中插入数据的类,编译时没有出错,也就是说语法上没有错,但运行时就报错了:
抛出的异常如下: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

解决方案 »

  1.   

    你把"林时"改为英文字母看看还会报什么错...
    然后把"?useUnicode=true&characterEncoding=GBK"去掉,使用平台默认字符集看看是否还有问题
      

  2.   

    还是不行,改了后它又提示不能使用linshi了,我估计不是那个错啊
      

  3.   

    jdbc:microsoft:sqlserver://localhost:1433后面+上的你数据库名
    比如:
    jdbc:microsoft:sqlserver://localhost:1433/splan 这样试下
      

  4.   

    呵呵,那大概是你少了''的缘故....
    比如,你的句子还原出来是
    insert into xs values(051118,林时,1988-05-08,男,计算机,80,他是一个好学生)
    但是你数据库里要求char应该是'林时'....前边的纯数字要不要''对char不会有影响后面你可能会碰到提示datetime/出生日期的问题,因为数据库的datetime类型似乎不是你的'1988-05-08'这个样子的
      

  5.   

    换一种驱动程序试试,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
      

  6.   

    把sql语句打出来,直接在数据库运行看能不能插入数据。
      

  7.   

    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";
    试一下!
      

  8.   

    我在数据库中用一下数据
    insert into xs values('051117','林时','计算机','男','1985-04-05','80','的师傅说的')
    go
    能成功插入数据
      

  9.   

    sql="insert into xs values("+number+","+name+","+birthday+","+sex+","+ 
                    subject+","+grade+","+context+")";                            
    // 有问题,改成
    sql="insert into xs values('"+number+"','"+name+"','"+birthday+"','"+sex+"','"+ 
                    subject+"','"+grade+"','"+context+"')"; 
    // 应该就没问题了!
      

  10.   

            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); 
      

  11.   

            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); 
      

  12.   

    result=stmt.executeUpdate(sql); 这样错了吧,应该是stmt.executeUpdate(sql); 因为它返回的是int型。
      

  13.   

    我按你们的方法改了,但又提示说:【SQLServer 2000 Driver for JDBC】 【SQLServer】对象名'xs'无效。
    难道还要管理工具中建立数据源?可我用的不是ODBC--JDBC呀。
      

  14.   

    sql语句不对,字符串要用单引号框起来推荐用绑定变量preparedStatement.
      

  15.   


    对头,少很多烦恼,何必拼sql呢,多累
      

  16.   

    sql="insert into xs values("+number+","+name+","+birthday+","+sex+","+ 
                    subject+","+grade+","+context+")";  改为
    sql="insert into xs values('"+number+"','"+name+"','"+birthday+"','"+sex+"','"+ 
                    subject+"','"+grade+"','"+context+"')";
    拼接时少了''  
      

  17.   

    谢谢啊,貌似是我的数据库中的数据和java中的数据在转换时出现了问题。
      

  18.   

    你要学着去调试错误   别动不动就把问题贴出来 
       
    这问题都有:
    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); 
      

  19.   

    用PrepareStatement解决了,谢谢大家的解答