我使用sqlite建立数据库后,为什么我使用insert语句后,虽然程序有显示正常,可是我的db文件里面还是没有数据
源代码:
/**
 * 功能:数据库连接类
 */
package dao;import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;public class Dao{
// static Connection conn = null;
static Statement stmt = null;
static ResultSet rs = null;
static
{
try
{
Class clz = Class.forName("SQLite.JDBCDriver");
Connection conn = DriverManager.getConnection("jdbc:sqlite:/DATA/1.db");
conn.setAutoCommit(false);
stmt = conn.createStatement();
}catch (ClassNotFoundException e)
{
// TODO Auto-generated catch block
e.printStackTrace();
}catch (SQLException e)
{
// TODO Auto-generated catch block
e.printStackTrace();
}
}
public Dao()
{
}
public static void main(String[] args)
{
System.out.println("数据库测试类");
// new Dao();
try
{
 stmt.executeUpdate( "create table tbl1(name varchar(20), salary int);" );//创建一个表,两列          
         stmt.executeUpdate( "insert into tbl1 values('ZhangSan',8000);" ); //插入数据    stmt.executeUpdate( "insert into tbl1 values('LiSi',7800);" );
   stmt.executeUpdate( "insert into tbl1 values('WangWu',5800);" );
   stmt.executeUpdate( "insert into tbl1 values('ZhaoLiu',9100);" ); 
   stmt.executeUpdate( "update tb_every_day_count set edc_date = '1111';" ); 
 
         rs = stmt.executeQuery("select * from tbl1"); //查询数据           while (rs.next()) { //将查询到的数据打印出来              System.out.print("name = " + rs.getString("name") + " "); //列属性一              System.out.println("salary = " + rs.getString("salary")); //列属性二          }
         rs.close();
}catch (SQLException e)
{
// TODO Auto-generated catch block
e.printStackTrace();
} }
}

解决方案 »

  1.   

    conn.setAutoCommit(false); //不是自动commit所以你insert完数据以后,一定要自己调用 conn.commit();才能反映到后台db,否则,一切都是浮云
      

  2.   

    楼主的代码质量不高,首先说为什么没插入数据
    因为你里面有这样一行 conn.setAutoCommit(false);,所以SQL语句不会自动提交,而且你整个程序都没有Statement和Connection的关闭语句,所以SQL最终根本没有提交所以解决方法有两个
    第一,取消 conn.setAutoCommit(false);
    第二,JDBC操作完毕及时关闭Statement和Connection
      

  3.   

    两个解决思路,第一种保留 conn.setAutoCommit(false); 但是在程序退出之前执行Connection.commit()方法,这样conn就得设置为类全局静态变量
    第二种就是conn.setAutoCommit(false);注解掉,或设置conn.setAutoCommit(true);默认状态是自动提交的