Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/332.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

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/69.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语句_Java_Sql_Database - Fatal编程技术网

用java编写SQL语句

用java编写SQL语句,java,sql,database,Java,Sql,Database,我正试图连接到一个数据库,并使用java程序中准备好的语句更新其中的一个表——该数据库称为“数据库”,其中还有另一个名为“视图”的文件夹,我正试图在其中更新的表(“表”)。这是我的密码: public void updateTable(Map<String, String> mp) throws SQLException { String URL = "jdbc:oracle:thin:@localhost:1500:orcl"; String USER = "us

我正试图连接到一个数据库,并使用java程序中准备好的语句更新其中的一个表——该数据库称为“数据库”,其中还有另一个名为“视图”的文件夹,我正试图在其中更新的表(“表”)。这是我的密码:

public void updateTable(Map<String, String> mp) throws SQLException {

    String URL = "jdbc:oracle:thin:@localhost:1500:orcl";
    String USER = "user";
    String PASS = "password";
    Connection con = DriverManager.getConnection(URL, USER, PASS);

    PreparedStatement updateTableName = null;


    String updateString =
        "update database.Views.TABLE " +
        "set TABLENAME = ? " +
        "where TABLENAME = ?";

    try {
        con.setAutoCommit(false);
        updateTableName = con.prepareStatement(updateString);

        for (Map.Entry<String, String> e : mp.entrySet()) 
        {
            updateTableName.setString(1, e.getValue());
            updateTableName.setString(2, e.getKey());
            updateTableName.executeUpdate();
            con.commit();

        }

    } catch (SQLException e) {

        if (con != null) 
        {
            try {
                System.err.print("Transaction is being rolled back");
                con.rollback();
            } catch (SQLException excep) {

            }
        }
    } finally {
        if (updateTableName != null) 
        {
            updateTableName.close();
        }
        con.setAutoCommit(true);
}
    con.close();
 }
public void updateTable(Map mp)抛出SQLException{
String URL=“jdbc:oracle:thin:@localhost:1500:orcl”;
字符串USER=“USER”;
字符串PASS=“password”;
Connection con=DriverManager.getConnection(URL、用户、通行证);
PreparedStatement updateTableName=null;
字符串更新字符串=
“更新database.Views.TABLE”+
“设置TABLENAME=?”+
“其中TABLENAME=?”;
试一试{
con.setAutoCommit(假);
updateTableName=con.prepareStatement(updateString);
对于(Map.Entry e:mp.entrySet())
{
setString(1,e.getValue());
setString(2,e.getKey());
updateTableName.executeUpdate();
con.commit();
}
}捕获(SQLE异常){
如果(con!=null)
{
试一试{
系统错误打印(“事务正在回滚”);
con.rollback();
}捕获(SQLException例外){
}
}
}最后{
if(updateTableName!=null)
{
updateTableName.close();
}
con.setAutoCommit(真);
}
con.close();
}
每当我运行代码时,它都会显示“事务正在回滚”。知道try语句中有哪些错误吗?提前谢谢

编辑:当我将其更改为打印异常时,它将显示ORA-00971:missing SET关键字

    "update database.Views.TABLE" +
    "set TABLENAME = ?" +
    "where TABLENAME = ?";
此字符串的值为

update database.Views.TABLEset TABLENAME = ?where TABLENAME = ?

这是无效的SQL。

您应该尝试记录在第一个catch块中捕获的
SQLException
,这样可以清楚地指出问题所在


在任何情况下,
TABLE
都是SQL保留关键字,您不应该被允许这样命名一个表-至少尝试将其重命名为
TABLE1
,因为没有更好的名称。

好的,我想出来了,@Spiff我确实将其更改为最简单的查询,只需更新TABLE1,但我还删除了:

String updateString =
    "update database.Views.TABLE " +
    "set TABLENAME = ? " +
    "where TABLENAME = ?";
并将其与

updateTableName = con.prepareStatement(updateString)
使:

updateTableName = con.prepareStatement(update TABLE1 set TABLENAME = ? where TABLENAME = ?);

打印/记录异常可能会给你一些提示。你读到异常了吗?我弄错了间距是的,但是“database.Views.TABLE”无效吗?@user22你试过固定间距吗?@djechlin是的,我已经确定了表格在我的程序中是不同的名称,我只是在这里更改了它,所以这不是问题。但是当我记录它时,它说它是“缺少SET关键字”,现在查询是什么样子的?看起来间距问题还没有解决。那么查询是什么样子的呢?“missing SET keyword”表示“UPDATE”查询中没有“SET”。是的,这就是我的意思,但我的查询是代码“UPDATE database.Views.TABLE”+“SET TABLENAME=?”+“where TABLENAME=?”中的“String updateString”;我从来没有使用过像这样的完全限定名(Database.Views.TABLE1)或者在Oracle中看到过这个“文件夹”的东西。。。您是否尝试过发送最简单的查询:updatetable1 set TABLENAME=?其中TABLENAME=?