往用odbc插入数据库,从oracle里能查到最近执行的sql,但是数据库记录没增加。而且最近执行的那条SQL:INSERT into "wchong_test" ("name","age")values(:1,:2),单独在客户端执行这条SQL会报错:[Err] ORA-01008: not all variables bound。
ringa_lee
可能是connection的自動提交被禁用了,如
conn.setAutoCommit(false);
可以在executeUpdate增加下面的語句,然後看資料庫中是否有記錄產生。
conn.commit();
另外,oracle看到的帶:1 :2的語句,很明顯是在java端使用了PreparedStatement,因此這個語句在oracle中是不能直接執行的,可以從v$sql_bind_capture中使用sql_id條件,查找具體綁定定變數的值。
如果executeUpdate返回1数据库没有记录,那我只能想到事务了,確認事務有成功提交。
executeUpdate
1
事务
INSERT into "wchong_test" ("name","age")values(:1,:2)
:1/:2 感觉是命名参数啊,类似于spring jdbc中的Named Parameter,很显示你直接执行这条SQL是有问题的:1这不是一个正确数据类型,要使用':1'引號括起來。
:1/:2
spring jdbc
Named Parameter
:1
':1'
考慮兩個問題
1.你的SQL使用了PreparedStatement,是否服務端直接拿這句SQL進行資料庫操作,而非作為PreparedStatement使用?
2.如果你服務端沒問題,那麼查詢是否能正常查詢?考慮一下是不是沒有新增事務管理,我以前常寫service時忘記加@Transaction,於是插入刪除修改操作全部是執行沒提交,不報錯,資料庫資料沒變動,最後才發現忘了加spring的事務管理,你也可以查一下是不是這個問題,當然你不一定用的spring的事務管理,但道理相似
最後,你直接在Navicat裡執行這句一定是沒效果的,都是佔位符你想查啥?插入啥?顯然是不對的,要直接試SQL就把佔位的改成單引號包起來的測試資料。
insert into的tableName是不需要加""的吧
可能是connection的自動提交被禁用了,如
可以在executeUpdate增加下面的語句,然後看資料庫中是否有記錄產生。
另外,oracle看到的帶:1 :2的語句,很明顯是在java端使用了PreparedStatement,因此這個語句在oracle中是不能直接執行的,可以從v$sql_bind_capture中使用sql_id條件,查找具體綁定定變數的值。
如果
executeUpdate
返回1
数据库没有记录,那我只能想到事务
了,確認事務有成功提交。:1/:2
感觉是命名参数啊,类似于spring jdbc
中的Named Parameter
,很显示你直接执行这条SQL是有问题的:1
这不是一个正确数据类型,要使用':1'
引號括起來。考慮兩個問題
1.你的SQL使用了PreparedStatement,是否服務端直接拿這句SQL進行資料庫操作,而非作為PreparedStatement使用?
2.如果你服務端沒問題,那麼查詢是否能正常查詢?考慮一下是不是沒有新增事務管理,我以前常寫service時忘記加@Transaction,於是插入刪除修改操作全部是執行沒提交,不報錯,資料庫資料沒變動,最後才發現忘了加spring的事務管理,你也可以查一下是不是這個問題,當然你不一定用的spring的事務管理,但道理相似
最後,你直接在Navicat裡執行這句一定是沒效果的,都是佔位符你想查啥?插入啥?顯然是不對的,要直接試SQL就把佔位的改成單引號包起來的測試資料。
insert into的tableName是不需要加""的吧