繁体   English   中英

使用jdbc的数据库中的值显示空值

[英]Values from database using jdbc showing null values

我是JDBC的初学者。 我写了以下代码,我检查了表中的值是否正确插入?我不知道我在哪里错了?

import java.io.*;
import java.sql.*;

class Emp
{
    int eno,sal;
    String name,dept;
    Connection cn=null;
    Statement st=null;
    ResultSet rs=null;

    Emp()
    {
        try
        {
            BufferedReader br=new BufferedReader(new InputStreamReader(System.in));
            System.out.println("Enter Employee number:");
            eno=Integer.parseInt(br.readLine());
                    System.out.println("Enter salary:");
            sal=Integer.parseInt(br.readLine());


            System.out.println("Enter name:");
            name=(br.readLine());


            System.out.println("Enter Department:");
            dept=(br.readLine());

            Class.forName("com.mysql.jdbc.Driver");
            cn=DriverManager.getConnection("jdbc:mysql://localhost:3306/employee","root","");
            if(cn==null)
                System.out.println(" error in connection");
            st=cn.createStatement();
            st.executeUpdate("insert into emp values(eno,sal,name,dept);");
            System.out.println("Record Inserted");

            rs=st.executeQuery("select * from emp");
            rs.first();

            System.out.println("Employee table");

            while(!rs.isLast())
            {
            System.out.println("Eno:"+rs.getInt(1)+"sal:"+rs.getInt(2)+"name:"+rs.getString(3)+"dept:"+rs.getString(4));
            rs.next();
            }   
        }
        catch(Exception e){}
    }

    public static void main(String args[]) throws Exception
    {
        Emp e=new Emp();
    }
}

问题是输出显示如下

Eno:0sal:0name:dept:
Eno:0sal:0name:dept:
Eno:0sal:0name:dept:
Eno:0sal:0name:dept:
Eno:0sal:0name:dept:

您实际上并未将变量传递到SQL INSERT String因此很有可能引发了异常,但未在空异常块中报告该异常。 在这种情况下,该表将为空,从而在任何executeQuery上产生空值

st.executeUpdate("insert into emp values(" + eno "," + sal + ",'" + name + "','" + dept + "');");

也不要让可能的SQLException静默发生,添加

catch (SQLException sqle) {
   sqle.printStackTrace();
}

最好使用PreparedStatement防止SQL注入攻击。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM