2016-01-30 2 views
0

Java String всегда отправляет null в базу данных mysql. Это будет отображаться моноширинным шрифтом. Первые четыре пробела будут удалены, но все остальные пробелы будут сохранены.Java string/stringbuilder Вставить нуль в базу данных mysql

Markdown and HTML are turned off in code blocks: 
<i>This is not italic</i>, and [this is not a link](http://example.com) 

У меня есть программа, которая отлично работает в командной строке и дает желаемый результат, но когда я сохраняю значение в базе данных, он всегда сохраняет значение null.

void hddName(String ip) { 

    try { 
     String commands="cmd /c wmic.exe DISKDRIVE get name";//HDD Details 
     //System.out.println({"CMD", "/C", "WMIC OS GET Installdate,SerialNumber"}); 
     Process process = Runtime.getRuntime().exec(commands); 
     process.getOutputStream().close(); //Closing output stream of the process 
     System.out.println(); 
     StringBuilder sb=new StringBuilder(); 
     //Reading sucessful output of the command 
     BufferedReader reader = new BufferedReader(new InputStreamReader(process.getInputStream())); 
    while ((s = reader.readLine()) != null) 
    { 
     sb.append(s).toString();//append output 
    } 
     System.out.println("result"+sb);//gives result with null keyword 
     String ss=sb.toString();//gives result with null keyword 
     System.out.println("result"+ss); 
     try{ 
       System.out.println(s); 
       Connection conn; 
       Statement stmt; 
       Class.forName("com.mysql.jdbc.Driver"); 
       conn = DriverManager.getConnection("jdbc:mysql://localhost:3306/system","root",""); 
       stmt= conn.createStatement(); 
       String sql="update sys set hdname='"+ss+"' where ip='"+ip+"'";// save null to mysql database 
       int val= stmt.executeUpdate(sql); 
       conn.close(); 
       stmt.close(); 
      } 
      catch(Exception e) 
      { 

      } 
    // Reading error if any 
    reader = new BufferedReader(new InputStreamReader(process.getErrorStream())); 
    while ((s = reader.readLine()) != null) 
    { 
    System.out.println(s);//any error 
    } 
    } 
    catch (IOException e) 
{ 
    e.printStackTrace(); //TODO: necessary exception handling 
    } 
    // return s; 
} 
+0

btw, что-то не в тему: вы не должны вызывать 'toString()' at 'sb.append (s) .toString(); // append output' –

ответ

0

Печатается ли null в вашем sysouts? sb allways null?

System.out.println("result"+sb);//gives result with null keyword 
    String ss=sb.toString();//gives result with null keyword 
    System.out.println("result"+ss); 

Попробуйте

String ss= ""; 
    //Reading sucessful output of the command 
    BufferedReader reader = new BufferedReader(new InputStreamReader(process.getOutputStream())); 
while ((s = reader.readLine()) != null) 
{ 
    ss = ss + s.toString();//append output 
} 

Надеется, что это помогает.

+0

Это печатает как имя \\. \ PHYSICALDRIVE0 null, но когда Я вставляю его в базу данных mysql, это только вставка NULL –

+0

Это печатает как --------- {Name \\. \ PHYSICALDRIVE0 null} ----------------- - но когда я вставляю его в базу данных mysql, это только insert NULL –

+0

Im не уверен, что вам нужно сохранить, но ... вы пробовали: «process.getOutputStream()» вместо «process.getInputStream()»? –

0

Никогда не внедряйте значение как часть SQL. Вы делаете свою программу уязвимой для SQL-инъекции.

ли что-то вроде:

stmt= conn.prepareStatement("update sys set hdname= ? where ip=?"); 
stmt.setString(1, ss); 
stmt.setString(2, ip); 
stmt.executeUpdate(); 

Если вы уверены, что ss не null, то, возможно, проблема вызвана странным SQL сконструированного вашего метода.

0

Это из-за BufferedReader. Так как я читал из буфера. и, наконец, он помещает значение null в переменную. Итак, я сначала пишу свой вывод в файл, а затем читаю его, а затем сохраняю в базе данных.