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

时间:2015-11-22 12:37:04

标签: java

我的程序采用两个变量(键和文本),并使用一些算法来加密这两个变量。但我试图在这样的字段(作业表中的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命令未正确结束   你好,世界!   流程已完成。

1 个答案:

答案 0 :(得分:0)

我对updateRows课程中的dbconnection方法一无所知。我认为您对execute()executeQuery()方法没有正确的认识。

  • boolean execute(String SQL): - 如果是,则返回一个布尔值true 可以检索ResultSet对象;否则,它返回false。我们 可以使用此方法执行SQL DDL语句。
  • ResultSet executeQuery(String SQL): - 返回ResultSet对象。 当我们想在db。
  • 中执行SELECT查询时,我们可以使用此方法

因此,在这种情况下,我假设您要在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();

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