package cn.com.jdbcd;import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;/**
 * 
 *用单子设计模式连接数据库
 * 
 */
public class ConnectionDB {
private static Connection conn = null; private ConnectionDB() { }

public static Connection ConnectionDB(){
if(conn==null){
try {
Class.forName("oracle.jdbc.driver.OracleDriver");
String url="jdbc:oracle:thin:@localhost:1521:system";
String user="scott";
String password="tiger";
conn=DriverManager.getConnection(url, user, password);
System.out.println("数据库连接成功...........");
} catch (ClassNotFoundException e) {
System.out.println("数据库驱动异常:"+e.getMessage());
e.printStackTrace();
} catch (SQLException e) {
System.out.println("数据库连接异常"+e.getMessage());
e.printStackTrace();
}
}
return conn;
}

/**
 * 关闭数据库连接
 */

public static void closeDB(PreparedStatement ps,
ResultSet rs){
if(rs!=null){
try {
rs.close();
} catch (SQLException e) {
System.out.println("关闭数据库异常:"+e.getMessage());
e.printStackTrace();
}
}if(ps!=null){
try {
ps.close();
} catch (SQLException e) {
System.out.println("关闭数据库异常2"+e.getMessage());
e.printStackTrace();
}
}
}
}
---------------------------------
package cn.com.jdbcd;import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.util.Scanner;public class TestJdbc1 { /**
 * JDBC连接数据库
 */ private Connection conn = ConnectionDB.ConnectionDB(); private PreparedStatement ps = null; private ResultSet rs = null;

private int rs1=0; public static void main(String[] args) {
          TestJdbc1 test=new TestJdbc1();
          //Scanner sc=new Scanner(System.in);
          //System.out.print("进行模糊查询,请输入他的姓名中的任意字");
          //test.findInfo();
          //String S=sc.nextLine();
          //test.likeFindInfo(S);
          test.insertInfo(70,"国防部","北京");
}
/**
 * 
 * @param id
 * 插入记录
 * @param loc
 */
    private void insertInfo(int id,String name,String loc) {
StringBuffer sql3=new StringBuffer(
"insert into  dept ");
if(id!=0&&name!=null&&loc!=null){
sql3.append("  values("+id+",'"+name+"','"+loc+"')");
}
try {
ps=conn.prepareStatement(sql3.toString());
System.out.println(sql3.toString());
//System.out.println("部门号" + "\t" + "姓名                                 "+"籍贯");
   
rs1=ps.executeUpdate();
//System.out.println(rs1);
while(rs.next()){
System.out.print(rs.getInt("deptno")+"\t");
System.out.print(rs.getString("dname")+"\t");
System.out.print(rs.getString("loc")+"\t");
System.out.println();
}
} catch (SQLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
/**
     * 
     * 模糊查询
     */
private void likeFindInfo(String name) {

/*String sql2="select deptno,dname,loc from " +
"dept where 1==1";*/
StringBuffer sql2=new StringBuffer("select * from dept where 1=1");

/*if(id!=0){
sql2.append(" and deptno like '%");//注意里面的单引号
sql2.append(id);
sql2.append("%'");
}*/
if(name!=null){
sql2.append("  and dname like '%");
sql2.append(name);
sql2.append("%'");
}
try {
ps=conn.prepareStatement(sql2.toString());
System.out.println(sql2.toString());
System.out.println("部门号" + "\t" + "姓名                                 "+"籍贯");
rs=ps.executeQuery();
while(rs.next()){
System.out.print(rs.getInt("deptno")+"\t");
System.out.print(rs.getString("dname")+"\t");
System.out.print(rs.getString("loc")+"\t");
System.out.println();
}
} catch (SQLException e) {
System.out.println("查询用户信息报错:"+e.getMessage());
e.printStackTrace();
}finally{
ConnectionDB.closeDB(ps, rs);
}

} public void findInfo() {
String sql = "select deptno,dname,loc from dept";
try {
ps = conn.prepareStatement(sql);
rs = ps.executeQuery();
System.out.println("部门号" + "\t" + "姓名                                 "+"籍贯");
while (rs.next()) {
System.out.print(rs.getInt(1) + "\t");
System.out.print(rs.getString(2) + "\t");
System.out.print(rs.getString(3) + "\t");
System.out.println(); }
} catch (SQLException e) {
System.out.println("查询用户信息报错" + e.getMessage());
e.printStackTrace();
}finally{
ConnectionDB.closeDB(ps, rs);
}
}

}
那个插入业务不能实现啊??
数据库连接成功...........
insert into  dept   values(70,'国防部','北京')
Exception in thread "main" java.lang.NullPointerException
at cn.com.jdbcd.TestJdbc1.insertInfo(TestJdbc1.java:51)
at cn.com.jdbcd.TestJdbc1.main(TestJdbc1.java:30)
该怎么解决啊?、谢谢,请帮忙改一下并说明原因

解决方案 »

  1.   


    package cn.com.jdbcd; import java.sql.Connection; 
    import java.sql.DriverManager; 
    import java.sql.PreparedStatement; 
    import java.sql.ResultSet; 
    import java.sql.SQLException; /** 

    *用单子设计模式连接数据库 

    */ 
    public class ConnectionDB { 
    private static Connection conn = null; private ConnectionDB() { } public static Connection ConnectionDB(){ 
    if(conn==null){ 
    try { 
    Class.forName("oracle.jdbc.driver.OracleDriver"); 
    String url="jdbc:oracle:thin:@localhost:1521:system"; 
    String user="scott"; 
    String password="tiger"; 
    conn=DriverManager.getConnection(url, user, password); 
    System.out.println("数据库连接成功..........."); 
    } catch (ClassNotFoundException e) { 
    System.out.println("数据库驱动异常:"+e.getMessage()); 
    e.printStackTrace(); 
    } catch (SQLException e) { 
    System.out.println("数据库连接异常"+e.getMessage()); 
    e.printStackTrace(); 


    return conn; 
    } /** 
    * 关闭数据库连接 
    */ public static void closeDB(PreparedStatement ps, 
    ResultSet rs){ 
    if(rs!=null){ 
    try { 
    rs.close(); 
    } catch (SQLException e) { 
    System.out.println("关闭数据库异常:"+e.getMessage()); 
    e.printStackTrace(); 

    }if(ps!=null){ 
    try { 
    ps.close(); 
    } catch (SQLException e) { 
    System.out.println("关闭数据库异常2"+e.getMessage()); 
    e.printStackTrace(); 




    --------------------------------- 
    package cn.com.jdbcd; import java.sql.Connection; 
    import java.sql.PreparedStatement; 
    import java.sql.ResultSet; 
    import java.sql.SQLException; 
    import java.util.Scanner; public class TestJdbc1 { /** 
    * JDBC连接数据库 
    */ private Connection conn = ConnectionDB.ConnectionDB(); private PreparedStatement ps = null; private ResultSet rs = null; private int rs1=0; public static void main(String[] args) { 
              TestJdbc1 test=new TestJdbc1(); 
              //Scanner sc=new Scanner(System.in); 
              //System.out.print("进行模糊查询,请输入他的姓名中的任意字"); 
              //test.findInfo(); 
              //String S=sc.nextLine(); 
              //test.likeFindInfo(S); 
              test.insertInfo(70,"国防部","北京"); 

    /** 

    * @param id 
    * 插入记录 
    * @param loc 
    */ 
        private void insertInfo(int id,String name,String loc) { 
    StringBuffer sql3=new StringBuffer( 
    "insert into  dept "); 
    if(id!=0&&name!=null&&loc!=null){ 
    sql3.append("  values("+id+",'"+name+"','"+loc+"')"); 

    try { 
    ps=conn.prepareStatement(sql3.toString()); 
    System.out.println(sql3.toString()); 
    //System.out.println("部门号" + "\t" + "姓名                                "+"籍贯"); 
      
    rs1=ps.executeUpdate(); 
    //System.out.println(rs1); 
    while(rs.next()){ 
    System.out.print(rs.getInt("deptno")+"\t"); 
    System.out.print(rs.getString("dname")+"\t"); 
    System.out.print(rs.getString("loc")+"\t"); 
    System.out.println(); 

    } catch (SQLException e) { 
    // TODO Auto-generated catch block 
    e.printStackTrace(); 


    /** 
        * 
        * 模糊查询 
        */ 
    private void likeFindInfo(String name) { /*String sql2="select deptno,dname,loc from " + 
    "dept where 1==1";*/ 
    StringBuffer sql2=new StringBuffer("select * from dept where 1=1"); /*if(id!=0){ 
    sql2.append(" and deptno like '%");//注意里面的单引号 
    sql2.append(id); 
    sql2.append("%'"); 
    }*/ 
    if(name!=null){ 
    sql2.append("  and dname like '%"); 
    sql2.append(name); 
    sql2.append("%'"); 

    try { 
    ps=conn.prepareStatement(sql2.toString()); 
    System.out.println(sql2.toString()); 
    System.out.println("部门号" + "\t" + "姓名                                "+"籍贯"); 
    rs=ps.executeQuery(); 
    while(rs.next()){ 
    System.out.print(rs.getInt("deptno")+"\t"); 
    System.out.print(rs.getString("dname")+"\t"); 
    System.out.print(rs.getString("loc")+"\t"); 
    System.out.println(); 

    } catch (SQLException e) { 
    System.out.println("查询用户信息报错:"+e.getMessage()); 
    e.printStackTrace(); 
    }finally{ 
    ConnectionDB.closeDB(ps, rs); 
    } } public void findInfo() { 
    String sql = "select deptno,dname,loc from dept"; 
    try { 
    ps = conn.prepareStatement(sql); 
    rs = ps.executeQuery(); 
    System.out.println("部门号" + "\t" + "姓名                                "+"籍贯"); 
    while (rs.next()) { 
    System.out.print(rs.getInt(1) + "\t"); 
    System.out.print(rs.getString(2) + "\t"); 
    System.out.print(rs.getString(3) + "\t"); 
    System.out.println(); } 
    } catch (SQLException e) { 
    System.out.println("查询用户信息报错" + e.getMessage()); 
    e.printStackTrace(); 
    }finally{ 
    ConnectionDB.closeDB(ps, rs); 

    } }那个插入业务不能实现啊?? 
    数据库连接成功........... 
    insert into  dept  values(70,'国防部','北京') 
    Exception in thread "main" java.lang.NullPointerException 
    at cn.com.jdbcd.TestJdbc1.insertInfo(TestJdbc1.java:51) 
    at cn.com.jdbcd.TestJdbc1.main(TestJdbc1.java:30) 
    该怎么解决啊?、谢谢,请帮忙改一下并说明原因
      

  2.   


    //你连接数据库类是没有问题的。下面的是有问题。
    package cn.com.jdbcd;import java.sql.Connection;
    import java.sql.PreparedStatement;
    import java.sql.ResultSet;
    import java.sql.SQLException;
    import java.util.Scanner;public class TestJdbc1 { /**
     * JDBC连接数据库
     */ private Connection conn = ConnectionDB.ConnectionDB(); private PreparedStatement ps = null; private ResultSet rs = null; private int rs1 = 0; public static void main(String[] args) {
    TestJdbc1 test = new TestJdbc1();
    // Scanner sc=new Scanner(System.in);
    // System.out.print("进行模糊查询,请输入他的姓名中的任意字");
    // test.findInfo();
    // String S=sc.nextLine();
    // test.likeFindInfo(S);
    test.insertInfo(70, "国防部", "北京");
    } /**
     * 
     * @param id
     *            插入记录
     * @param loc
     */
    private void insertInfo(int id, String name, String loc) {
    StringBuffer sql3 = new StringBuffer("insert into  dept ");
    if (id != 0 && name != null && loc != null) {
    sql3.append("  values(" + id + ",'" + name + "','" + loc + "')");
    }
    try {
    ps = conn.prepareStatement(sql3.toString());
    System.out.println(sql3.toString());
    // System.out.println("部门号" + "\t" + "姓名 "+"籍贯");
    rs1 = ps.executeUpdate();  //记录影响的行数
    // System.out.println(rs1);
    /*这注释都不用了,因为你都是想打印信息,你已经在下面打印了,这里打印rs还是空的,所以就出现了异常。
     * while (rs.next()) { System.out.print(rs.getInt("deptno") + "\t");
     * System.out.print(rs.getString("dname") + "\t");
     * System.out.print(rs.getString("loc") + "\t");
     * System.out.println(); }
     */
    } catch (SQLException e) {
    // TODO Auto-generated catch block
    e.printStackTrace();
    }
    } /**
     * 
     * 模糊查询
     */
    private void likeFindInfo(String name) { /*
     * String sql2="select deptno,dname,loc from " + "dept where 1==1";
     */
    StringBuffer sql2 = new StringBuffer("select * from dept where 1=1"); /*
     * if(id!=0){ sql2.append(" and deptno like '%");//注意里面的单引号
     * sql2.append(id); sql2.append("%'"); }
     */
    if (name != null) {
    sql2.append("  and dname like '%");
    sql2.append(name);
    sql2.append("%'");
    }
    try {
    ps = conn.prepareStatement(sql2.toString());
    System.out.println(sql2.toString());
    System.out.println("部门号" + "\t"
    + "姓名                                " + "籍贯");
    rs = ps.executeQuery();
    while (rs.next()) {
    System.out.print(rs.getInt("deptno") + "\t");
    System.out.print(rs.getString("dname") + "\t");
    System.out.print(rs.getString("loc") + "\t");
    System.out.println();
    }
    } catch (SQLException e) {
    System.out.println("查询用户信息报错:" + e.getMessage());
    e.printStackTrace();
    } finally {
    ConnectionDB.closeDB(ps, rs);
    } } public void findInfo() {
    String sql = "select deptno,dname,loc from dept";
    try {
    ps = conn.prepareStatement(sql);
    rs = ps.executeQuery();
    System.out.println("部门号" + "\t"
    + "姓名                                " + "籍贯");
    while (rs.next()) {
    System.out.print(rs.getInt(1) + "\t");
    System.out.print(rs.getString(2) + "\t");
    System.out.print(rs.getString(3) + "\t");
    System.out.println(); }
    } catch (SQLException e) {
    System.out.println("查询用户信息报错" + e.getMessage());
    e.printStackTrace();
    } finally {
    ConnectionDB.closeDB(ps, rs);
    }
    }}
      

  3.   

    while(rs.next()){ 
    System.out.print(rs.getInt("deptno")+"\t"); 
    System.out.print(rs.getString("dname")+"\t"); 
    System.out.print(rs.getString("loc")+"\t"); 
    System.out.println(); 

    插入记录方法中这段代码根本没意义,rs肯定是null