Java 使用新的加密值更新我的表

Java 使用新的加密值更新我的表,java,Java,我的程序采用两个变量(密钥和文本),并使用一些算法对这两个变量进行加密。但我试图在这样的字段(作业表中的作业名称)上应用该程序来加密其值,我遇到了一个问题。 这是我的节目: public class dbconnection { java.sql.Connection con; java.sql.Statement st; ResultSet rs; public EncBean getConnection()throws SQLExce

我的程序采用两个变量(密钥和文本),并使用一些算法对这两个变量进行加密。但我试图在这样的字段(作业表中的作业名称)上应用该程序来加密其值,我遇到了一个问题。 这是我的节目:

     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());
   } }}          
输出为: 32313050“2#3&3'2”3&2&3$1'2$2&250//加密值 更新作业集job_name='32313050“2#3&3'2”3&2&3$1'2$2&250' ORA-00933:SQL命令未正确结束 你好,世界!
进程已完成。

我不清楚
dbconnection
类中的
updateRows
方法。我认为您对
execute()
executeQuery()
方法没有正确的认识

  • 布尔执行(字符串SQL):-如果 可以检索ResultSet对象;否则,它将返回false。我们 可以使用此方法执行SQL DDL语句
  • ResultSet executeQuery(字符串SQL):-它返回一个ResultSet对象。 当我们想在数据库中执行SELECT查询时,可以使用这种方法
因此,在本例中,我假设您将在
updateRows
方法中执行更新。因此,使用
ResultSet rs=updatequery.executeQuery()是没有用的一旦您要执行更新。它还提供了一个错误。
(java.sql.SQLException:无法使用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();

创建查询的字符串连接可能会出现性能和安全问题。

非常感谢您Madushan Perera的回复,我想告诉您密钥不在数据库中,但我在运行时输入它,其中密钥与字段名(作业名称)关联它们被一些相关函数加密。我想通过字段中的这些加密值更新我的表。我该怎么做?给我提个建议。
PreparedStatement ps =con.prepareStatement("UPDATE job SET job_name =? WHERE job_id=?");
          ps.setString(1, "Sam");
          ps.setInt(2, 2);
          ps.execute();