import java.sql.*;
public class myDB {
public static void main(String[] args) {
// TODO Auto-generated method stub
try{
Class.forName("org.apache.derby.jdbc.EmbeddedDriver").newInstance();
System.out.println("Load the embedded driver"); 
Connection conn=DriverManager.getConnection("jdbc:derby:myDB;create=true","ying","password");
System.out.println("create and connect to myDB");
Statement s=conn.createStatement(); 
System.out.println("Created table myDB");
s.execute("create table employee(no varchar(4),name varchar(8),sex varchar(2),salary float)");
s.execute("insert into employee values('1001','张强','男',675.20)");//SQL语句,字符串用''单引号
s.execute("insert into employee values('1004','李香','女',842.00)");//SQL语句,字符串用''单引号
s.execute("insert into employee values('1007','王大山','男',765.20)");//SQL语句,字符串用''单引号
s.execute("insert into employee values('1010','赵玉花','女',690.20)");//SQL语句,字符串用''单引号
//返回所有男员工记录
ResultSet rs=s.executeQuery("select no,name,sex,salary from employee where sex='男'");
System.out.println("no\t name\t sex\t salary");
//next方法,ResultSet 光标最初位于第一行之前;第一次调用 next 方法使第一行成为当前行;
//当调用 next 方法返回 false 时,光标位于最后一行的后面。任何要求当前行的 ResultSet 方法调用将导致抛出 SQLException。
while(rs.next()){
StringBuilder builder=new StringBuilder(rs.getString(1));
builder.append("\t");
builder.append(rs.getString(2));
builder.append("\t");
builder.append(rs.getString(3));
builder.append("\t");
builder.append(rs.getFloat(4));
System.out.println(builder.toString());
}
//添加记录
s.execute("insert into employee valus('2001','邢雪花','女',650)");
//修改salary
s.execute("update employee set salary=900 where no='2001'");
rs=s.executeQuery("select salary from employee where no='2001'");
rs.next();
float f=rs.getFloat(1);
System.out.println("no=2001员工修改后工资为:"+f);
//删除数据表
s.execute("drop table employee");
rs.close();
s.close();
conn.close();
try{
DriverManager.getConnection("jdbc:derby:;shutdown=true");
}catch(SQLException se){
System.out.println("Database shut down abnormally");
}
}catch(Throwable e){
e.printStackTrace();
}
System.out.println("Finished!");
}
}
运行时,总是说在第12行,创建数据表时出错,各位大神帮忙看看,是什么原因呢?

解决方案 »

  1.   

    import java.sql.*;
    public class myDB {
    public static void main(String[] args) {
    // TODO Auto-generated method stub
    try{
    Class.forName("org.apache.derby.jdbc.EmbeddedDriver").newInstance();
    System.out.println("Load the embedded driver"); 
    Connection conn=DriverManager.getConnection("jdbc:derby:myDB;create=true","ying","password");
    System.out.println("create and connect to myDB");
    Statement s=conn.createStatement(); 
    System.out.println("Created table myDB");
    s.execute("create table employee(id varchar(4),name varchar(8),sex varchar(2),salary float)");
    s.execute("insert into employee values('1001','张强','男',675.20)");//SQL语句,字符串用''单引号
    s.execute("insert into employee values('1004','李香','女',842.00)");//SQL语句,字符串用''单引号
    s.execute("insert into employee values('1007','王大山','男',765.20)");//SQL语句,字符串用''单引号
    s.execute("insert into employee values('1010','赵玉花','女',690.20)");//SQL语句,字符串用''单引号
    //返回所有男员工记录
    ResultSet rs=s.executeQuery("select no,name,sex,salary from employee where sex='男'");
    System.out.println("no\t name\t sex\t salary");
    //next方法,ResultSet 光标最初位于第一行之前;第一次调用 next 方法使第一行成为当前行;
    //当调用 next 方法返回 false 时,光标位于最后一行的后面。任何要求当前行的 ResultSet 方法调用将导致抛出 SQLException。
    while(rs.next()){
    StringBuilder builder=new StringBuilder(rs.getString(1));
    builder.append("\t");
    builder.append(rs.getString(2));
    builder.append("\t");
    builder.append(rs.getString(3));
    builder.append("\t");
    builder.append(rs.getFloat(4));
    System.out.println(builder.toString());
    }
    //添加记录
    s.execute("insert into employee valus('2001','邢雪花','女',650)");
    //修改salary
    s.execute("update employee set salary=900 where no='2001'");
    rs=s.executeQuery("select salary from employee where no='2001'");
    rs.next();
    float f=rs.getFloat(1);
    System.out.println("no=2001员工修改后工资为:"+f);
    //删除数据表
    s.execute("drop table employee");
    rs.close();
    s.close();
    conn.close();
    try{
    DriverManager.getConnection("jdbc:derby:;shutdown=true");
    }catch(SQLException se){
    System.out.println("Database shut down abnormally");
    }
    }catch(Throwable e){
    e.printStackTrace();
    }
    System.out.println("Finished!");
    }
    }
      

  2.   

    复制错了。。
    Load the embedded driver
    create and connect to myDB
    Created table myDB
    java.sql.SQLSyntaxErrorException: 语法错误:Encountered "no" at line 1, column 8。
    at org.apache.derby.impl.jdbc.SQLExceptionFactory40.getSQLException(Unknown Source)
    at org.apache.derby.impl.jdbc.Util.generateCsSQLException(Unknown Source)
    at org.apache.derby.impl.jdbc.TransactionResourceImpl.wrapInSQLException(Unknown Source)
    at org.apache.derby.impl.jdbc.TransactionResourceImpl.handleException(Unknown Source)
    at org.apache.derby.impl.jdbc.EmbedConnection.handleException(Unknown Source)
    at org.apache.derby.impl.jdbc.ConnectionChild.handleException(Unknown Source)
    at org.apache.derby.impl.jdbc.EmbedStatement.execute(Unknown Source)
    at org.apache.derby.impl.jdbc.EmbedStatement.executeQuery(Unknown Source)
    at myDB.main(myDB.java:18)
    Caused by: java.sql.SQLException: 语法错误:Encountered "no" at line 1, column 8。
    at org.apache.derby.impl.jdbc.SQLExceptionFactory.getSQLException(Unknown Source)
    at org.apache.derby.impl.jdbc.SQLExceptionFactory40.wrapArgsForTransportAcrossDRDA(Unknown Source)
    ... 9 more
    Caused by: ERROR 42X01: 语法错误:Encountered "no" at line 1, column 8。
    at org.apache.derby.iapi.error.StandardException.newException(Unknown Source)
    at org.apache.derby.impl.sql.compile.ParserImpl.parseStatement(Unknown Source)
    at org.apache.derby.impl.sql.GenericStatement.prepMinion(Unknown Source)
    at org.apache.derby.impl.sql.GenericStatement.prepare(Unknown Source)
    at org.apache.derby.impl.sql.conn.GenericLanguageConnectionContext.prepareInternalStatement(Unknown Source)
    ... 3 more
    Finished!
      

  3.   

    Caused by: ERROR 42X01: 语法错误:Encountered "no" at line 1, column 8。
    把列名no换成其他的看看,也许no在这个数据库中是不允许使用的,但是no在sqlite中是没有问题的