我的程序采用两个变量(键和文本),并使用一些算法来加密这两个变量。但我试图在这样的字段(作业表中的job_name)上应用该程序来加密其我遇到问题的值。 这是我的计划:
public class dbconnection {
java.sql.Connection con;
java.sql.Statement st;
ResultSet rs;
public EncBean getConnection()throws SQLException{
EncBean encBean1 = new EncBean();
String v_url= "jdbc:oracle:thin:@192.168.2.172:1522:orcl2";
String v_username= "scott";
String v_password = "tiger";
try
{
DriverManager.registerDriver(new oracle.jdbc.OracleDriver());
// Class.forName("oracle.jdbc.driver.OracleDriver");
con = DriverManager.getConnection(v_url,v_username,v_password);
System.out.println ("Connection to Oracle database was Established");
}
catch ( SQLException e)
{
e.printStackTrace();
}
return encBean1;
}
public EncBean selectRows()
{
EncBean encBean2 = new EncBean();
try
{
String SQLselect="select JOB_NAME from job";
st=con.createStatement();
rs=st.executeQuery(SQLselect);
while (rs.next()) {
encBean2.setName(rs.getString("JOB_NAME"));
}
}
catch ( Exception ex )
{
ex.printStackTrace();
}
return encBean2;}
public void updateRows(String updatedname){
try
{
String sql_statment = "UPDATE job SET job_name ='"+updatedname+"'";
System.out.println(sql_statment);
PreparedStatement updatequery = con.prepareStatement(sql_statment);
ResultSet rs = updatequery.executeQuery();
int records = rs.getInt(1);
for (int i=0; i<=records; i++) {
updatequery.setString(2,"job_name"+i);
}
updatequery.execute();
con.commit();
System.out.println("An existing user was updated successfully!");
}
catch(SQLException err){
System.out.println(err.getMessage());
} }}
在main中我调用此方法首先检索数据,对其进行加密并最后更新表作业中的数据
public class mainenc {
public static void main(String[] args) throws Exception{
dbconnection dbcon = new dbconnection();
EncBean encbeancon= dbcon.getConnection();
EncBean encBean5 = dbcon.selectRows();
enc concatinputs = new enc();
EncBean encBeanconcat = concatinputs.funconcat(encBean5.getName());
EncBean encBean4 = concatinputs.inputencryption(encBeanconcat.getConcatenatedData());
String vReserverbin= encBean4.getReversedBinary();
String ascistring= concatinputs.convertBinaryStringToString(vReserverbin);
System.out.println(ascistring);
dbcon.updateRows(ascistring);
输出是: 32313050“2#3&amp; 3'2”3&amp; 2&amp; 3 $ 1'2 $ 2&amp; 250 //加密值 UPDATE job SET job_name ='32313050“2#3&amp; 3'2”3&amp; 2&amp; 3 $ 1'2 $ 2&amp; 250' ORA-00933:SQL命令未正确结束 你好,世界! 流程已完成。
答案 0 :(得分:0)
我对updateRows
课程中的dbconnection
方法一无所知。我认为您对execute()
和executeQuery()
方法没有正确的认识。
因此,在这种情况下,我假设您要在updateRows
方法内执行更新。因此,一旦您要执行更新,就无法使用ResultSet rs = updatequery.executeQuery();
。它还会给您一个错误。(java.sql.SQLException: Can not issue data manipulation statements with executeQuery().)
。您可以使用ps.execute();
来取得成功。
执行下面的更新是一种很好的做法:强>
PreparedStatement ps =con.prepareStatement("UPDATE job SET job_name =? WHERE job_id=?");
ps.setString(1, "Sam");
ps.setInt(2, 2);
ps.execute();
创建查询的字符串连接可能会出现性能问题以及安全问题。