Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/sql-server/21.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 插入不';不会立即影响SQL Server_Java_Sql Server - Fatal编程技术网

Java 插入不';不会立即影响SQL Server

Java 插入不';不会立即影响SQL Server,java,sql-server,Java,Sql Server,SQL Server 2012遇到了一个非常奇怪的问题:在插入数据后,无法立即找到数据 我编写了一个java测试程序,可以从我的表中插入和获取数据,函数如下: public void insert(Int ID, String data, Timestamp date) { Connection con = null; PreparedStatement pstmt = null; try { con = ds.getConnection(); // u

SQL Server 2012遇到了一个非常奇怪的问题:在插入数据后,无法立即找到数据

我编写了一个java测试程序,可以从我的表中插入和获取数据,函数如下:

public void insert(Int ID, String data, Timestamp date) {

    Connection con = null;
    PreparedStatement pstmt = null;
    try {
        con = ds.getConnection(); // using Datasource to get connection
        con.setAutoCommit(false);
        pstmt = con.prepareStatement("INSERT INTO PrivData(ID, MyData, Create_date) VALUES(?,?,?)");

        pstmt.setInt(1, ID);
        pstmt.setString(2, data);
        pstmt.setTimestamp(3, date);

        int result = pstmt.executeUpdate();

        con.commit();

        Log4j.info("Insert result: " + result);

    } catch (SQLException se) {
        se.printStackTrace(System.err);
    } finally {
        if (pstmt != null) {
            try {
                pstmt.close();
            } catch (SQLException se) {
                se.printStackTrace(System.err);
            }
        }
        if (con != null) {
            try {
                con.close();
            } catch (Exception e) {
                e.printStackTrace(System.err);
            }
        }
    }
}

public MyData findData(int ID) {

    Mydata result = null;
    Connection con = null;
    PreparedStatement pstmt = null;
    ResultSet rs = null;

    try {

        con = ds.getConnection(); // using Datasource to get connection
        pstmt = con.prepareStatement("SELECT * FROM PrivData WHERE ID=?");

        pstmt.setInt(1, ID);

        rs = pstmt.executeQuery();

        if (rs.next()) {
            result = new Mydata();
            result.setID(rs.getInt("ID"));
            result.setData(rs.getString("MyData"));
            result.setDate(rs.getTimestamp("Create_date"));
        }

    } catch (SQLException se) {
        throw new RuntimeException("A database error occured. "
                + se.getMessage());
    } finally {
        if (rs != null) {
            try {
                rs.close();
            } catch (SQLException se) {
                se.printStackTrace(System.err);
            }
        }
        if (pstmt != null) {
            try {
                pstmt.close();
            } catch (SQLException se) {
                se.printStackTrace(System.err);
            }
        }
        if (con != null) {
            try {
                con.close();
            } catch (Exception e) {
                e.printStackTrace(System.err);
            }
        }
    }
    return result;
}
然后我尝试一下:

insert(1, "xxxxxxxxxxxxx", new Timestamp(System.currentTimeMillis()));
Mydata myData = findData(1);

if(myData == null) {
    Log4j.info("Failed to get data from DB");
    System.out.println("Failed to get data from DB");
    return;
}
else {
    System.out.println(myData.getData());
}
当我运行这些代码时,插入部分给出了日志中的
[INFO]插入结果:1
。因此,我假设在
Mydata Mydata=findData(1)处获取我的数据但不是:如果(myData==null)
它被
捕获。这意味着数据库中不存在数据

但是,如果我在这个代码完成后搜索我的数据库,那个么数据就不会被插入到表中,我将能够使用相同的代码和ID(使用
insert()
注释)获得它们。所以我认为在第一次运行时,有什么东西使我的
INSERT
停止了运行,但我不确定是哪个部分导致了这种情况

有人能告诉我如何解决这个奇怪的问题吗


-----更新----- @本图尔 嗯,
Mydata
并不复杂

Class Mydata {
    private int ID;
    private String Data;
    private Timestamp Date;

    public void setID(int id) {
        ID = id;
    }

    public void setData(String data) {
        Data = data;
    }

    public void setTimestamp(Timestamp ts) {
        Date = ts;
    }

    public int getID() {
        return ID;
    }

    public String getData() {
        return Data;
    }

    public Timestamp getTimestamp() {
        return Date;
    }
}
关于
ds
Datasource
,一种简单的解释方法是:对Java进行DB身份验证和连接更简单、更安全。在上面的代码中添加了一些关于此的注释


而你所说的[DS可能是相关的]…嗯,听起来像个黑点。我看看这是否可能是一个原因

您应该告诉我们您需要什么JDBC驱动程序use@RC. 这些jdbc是从另一个项目复制的,因此我只能告诉您它们的文件名:
sqljdbc4.jar
sqljdbc41.jar
@RajeevSreedharan我在上面发布了
findData()
。你还想知道什么?我只是一个DBA(无论如何都不是java专家),但如果是我,我会在
findData()
方法的fetching部分做一些日志记录(特别是在
executeQuery()之后的条件中)
call。我还想知道你的
MyData
类是什么样子的。第一个告诉你该调用是否实际获取了数据。第二个可能会告诉你数据是否在这些类属性中得到持久化。另外,在
ds.getConnection()中
ds
是什么
?这可能是相关的。我怀疑不是,但我们目前不排除任何可能性。