2012-08-22 113 views
0

我有一個簡單的程序,我想用戶提供的名字和姓氏,然後輸入到MySql數據庫中。這兩個變量,稱爲firstlast,將是簡單的命令行提示,因此掃描程序首先是掃描程序最後。然後採取第一次和最後一次,並將它們添加到我的MySql語句。這裏是我有的代碼,但由於某些原因,我無法獲得正確的語法。在這個例子中,我使用了語句,儘管我可以並且會使用預準備語句。在現實世界中,我會使用準備好的語句,但即使是一個聲明也適用於這個項目。Java - 發送變量插入數據到MySql數據庫

這是我的代碼與一個掃描儀行。現在,代碼確實與Cathy和Jones的兩個常量值一起工作。我希望這些是變量。

class AddStudent 
{ 

    public static void main (String[] args) 
    { 
     try 
     { 

      Connection conn = DriverManager.getConnection(url,user,pass); 
      Statement st = conn.createStatement(); 
      Scanner first = new Scanner(System.in); 
      System.out.println(first.nextLine()); 


      String SQL = "INSERT INTO test VALUES ('Cathy', 'Jones')"; 
      st.executeUpdate(SQL); 



       conn.close(); 

     } catch (Exception e) { 
      System.err.println("Got an exception! "); 
      System.err.println(e.getMessage()); 
     } 

    } 

    private static String url = "jdbc:mysql://localhost:3306/registrar"; 
+0

你會得到什麼錯誤? – hvgotcodes

回答

1

這麼多潛在的錯誤。

  1. 錯過了關閉}關閉類。
  2. 你確定你的數據庫正在運行嗎?
  3. 您是否創建了表test

4. Your scanner is amok。

Scanner scanner = new Scanner(System.in); 
String first = scanner.nextLine(); 
String last = scanner.nextLine(); 

5.

String SQL = "INSERT INTO test VALUES ('Cathy', 'Jones')"; 
st.executeUpdate(SQL); 

應該

String SQL = String.format("INSERT INTO test VALUES ('%s', '%s')", first, last); 
st.executeUpdate(SQL); 
+0

這不是['String.format'](http://goo.gl/iQ4C7)的工作原理。 – oldrinb

+0

對不起,只要代碼,它的工作,sql表獲取更新。我關掉了一些代碼。主要問題是如何將這些常數值更改爲變量。並從迄今爲止的所有答案,並感謝所有人,我想第一步將更改準備好的語句 – user1617807

+0

@veer lolwut facepalm thanx固定。最近進入了太多的語言...... – hvgotcodes

2

在這裏,你走了,但它不建議去與Statement

Scanner first = new Scanner(System.in); 
String f = first.nextLine(); 

Scanner last = new Scanner(System.in); 
String l = last.nextLine();  

String SQL = "INSERT INTO test VALUES ('" + f + "','" + l + "')"; 
st.executeUpdate(SQL); 

其建議是這樣的:

PreparedStatement ps = conn.prepareStatement("INSERT INTO test VALUES (?, ?)"); 
ps.setString(1, f); 
ps.setString(2, l); 
ps.executeUpdate(); 

java reference

+0

謝謝!..每個人的大力幫助,是的,我想,我必須讓我的頭腦準備好準備好的語句的語法。並在安全領域工作,但我真的不寫很多代碼。我知道Sql Injection有多容易。這主要是一個簡單的學校課程的測試項目,它提供的並不是那麼多的幫助。 – user1617807

0

做到這一點的最好辦法是通過以下方式,這是下面的代碼實現你想要的,並防止由用戶惡意或意外輸入引起的SQL注入和其他問題。

String firstName = "Cathy"; 
String lastName = "Jones"; 
String query= "INSERT INTO test VALUES (?,?)"; 
PreparedStatement stmt = mysqlConnection.prepareStatement(query); 
stmt.setString(1,firstName); 
stmt.setString(2,lastName); 
stmt.executeUpdate(SQL); 
+0

謝謝。是的,這似乎是我需要使用的方向。因此,你有第一部分字符串firstName設置爲Cathy,然後我可以將Cathy更改爲我從某些選擇的輸入中獲得的變量? – user1617807

+0

是的,您可以將值更改爲firstName或lastName,然後重新運行代碼。在上面的例子中,我有firstName等於凱茜,並且姓氏等於瓊斯....不知道我理解你的評論 – Tucker