JDBCで配列を使ったSQL文(INSERT)

このQ&Aのポイント
  • JDBCを使用して、配列を使ったSQL文(INSERT)を実行する方法について質問です。
  • プログラム内でstr1[0]の値を直接指定してデータベースに追加できるが、配列の値を使用する方法がわかりません。
  • エラーメッセージ「java.sql.SQLException: ERROR: column "みかん" does not exist」が表示されています。
回答を見る
  • ベストアンサー

JDBCで配列を使ったSQL文(INSERT)

早速ですがお願いします。例えば下のプログラムでのSQL文なのですが、配列str1[0]の中身”みかん”をINSERTしたいのですが、やりかたがわかりません。プログラミングの素人なので簡単な質問で申し訳ないですけど、どなたか教えてくれないでしょうか? ちなみにこのプログラムでstr1[0]のところを直接みかんと入れたらデータベースに追加することはできました。 import java.sql.*; class jdbc{ public static void main(String args[]){ String[] str1 = new String[1]; str1[0] = "みかん"; try{ Class.forName("org.postgresql.Driver"); String url = "jdbc:postgresql:test"; String user = ""; String password = ""; System.out.println("URL :" + url); System.out.println("USER :" + user); System.out.println("PASSWORD :" + password); Connection conn = DriverManager.getConnection(url, user, password); Statement stmt = conn.createStatement(); int insertCount = stmt.executeUpdate("INSERT INTO shinamono (hinmei,nedan) VALUES ('+str1[0]+', 1500)"); if (insertCount >0){ System.out.println("追加しました"); }else{ System.out.println("追加できませんでした"); } conn.commit(); stmt.close(); conn.close(); }catch(SQLException e){ e.printStackTrace(); }catch(Exception e){ e.printStackTrace(); } } } なおエラーメッセージは次の通りです。 java.sql.SQLException: ERROR: column "みかん" does not exist at org.postgresql.Connection.ExecSQL(Connection.java:533) at org.postgresql.jdbc2.Statement.execute(Statement.java:294) at org.postgresql.jdbc2.Statement.executeUpdate(Statement.java:78) at jdbc.main(jdbc.java:21)

質問者が選んだベストアンサー

  • ベストアンサー
noname#86752
noname#86752
回答No.1

int insertCount = stmt.executeUpdate("INSERT INTO shinamono (hinmei,nedan) VALUES ('+str1[0]+', 1500)"); この行ですね。文字列を+で連結しているので "insert into ...'" + str1[0] + "', 1500)" にならないといけません。ちゃんと前半の終わりと後半の始まりのダブルクォートを入れましょう。 それとstr1が配列なのは、今後拡張するからでしょうか?(今のプログラムでは配列である必要がないので・・・)

hojirou
質問者

お礼

早速の回答ありがとうございます。うまく追加する事ができました。 >それとstr1が配列なのは、今後拡張するからでしょうか? その予定です。HPから取ってきたデータを配列に入れて、そのデータをデータベースに追加するつもりでしたので、簡単な例でやり方をつかもうと思い質問させてもらいました。時間がなくて困っていたところ本当に助かりました。ありがとうございます。

関連するQ&A

  • JDBCでのinsertについて

    JDBCを使ってDBを扱います。 データベースはPostgresqlです。 Servlet+JSP+Beanで開発しているのですが、 以下のようなinsert処理をBeanで行っています。 String sql_insert = "INSERT INTO tal_ks(cd,kbn)" + " VALUES(" + vl1 + ",'" + vl2 + "')";System.out.println(sql_insert); System.out.println("SQL文発行"); int in = stmt.executeUpdate(sql_insert); System.out.println("(SQL文発行後"); ・ ・ ・ これを行うと、例外処理には流れず 実行したかのように見えるんですが、 実際はデータがはいっておりません。 このSQLと同じものをpsqlで直接実行すると insert できました。 これは、どういうことが原因なのでしょうか? 教えていただきたいです。

    • ベストアンサー
    • Java
  • JDBC PostgreSQLで必要なファイルはあるのでしょうか?

    LinuxでPostgreSQLのデータベースをJDBCでアクセスしたいのですが、以下のソースで次のエラーが発生します。何か必要なファイルでもあるのでしょうか? java.lang.ClassNotFoundException:org.postgres.Driver また、LinuxのODBCも必要なファイルがあるのでしょうか? import java.sql.*; class jdbcSample2 { public static void main(String argv[]) { int a; String b; try { //Class.forName ("sun.jdbc.odbc.JdbcOdbcDriver"); //String url = "jdbc:odbc:test"; Class.forName ("org.postgres.Driver"); String url = "jdbc:postgresql://127.0.0.1:5432/test"; String user = ""; String password = ""; Connection con = DriverManager.getConnection(url, user, password); Statement stmt = con.createStatement (); String query = "select * from member;"; ResultSet rs = stmt.executeQuery (query); while(rs.next()){ a = rs.getInt(1); b = rs.getString(2); System.out.println(a + ", " + b); } rs.close(); stmt.close(); con.close(); } catch (SQLException ex) { System.err.println("SQL failed."); ex.printStackTrace (); } catch (Exception ex) { ex.printStackTrace (); } } }

  • JDBCについて

    import java.io.BufferedReader; import java.io.IOException; import java.io.InputStreamReader; import java.sql.Connection; import java.sql.DriverManager; import java.sql.ResultSet; import java.sql.SQLException; import com.mysql.jdbc.PreparedStatement; import com.mysql.jdbc.Statement; public class DBtest { public static void main(String[] args){ try { Connection con = null; PreparedStatement ps = null; String url = "jdbc:mysql://localhost/address"; String user = "test"; String password = "pass"; con = DriverManager.getConnection(url, user, password); Statement st = (Statement) con.createStatement(); Statement st2 = (Statement) con.createStatement(); String sql = "SELECT * FROM data2"; ResultSet rs = st2.executeQuery(sql); try { System.out.println("ok"); // ここでクエリを実行 while(rs.next()){ System.out.println(rs.getString("name")+rs.getString("age")); } //氏名入力 System.out.println("氏名を入力してください。"); BufferedReader na = new BufferedReader(new InputStreamReader(System.in)); String Na = na.readLine(); String ins = "INSERT INTO data2(name,age)VALUES('?',20)"; ps = (PreparedStatement) con.prepareStatement(ins); ps.setString(1,Na); ps.executeUpdate(); //INSERT実行 int rs2 = st2.executeUpdate(ins); System.out.println(rs2); } catch (IOException e) { // TODO 自動生成された catch ブロック e.printStackTrace(); } finally { // 直前の try ブロックに入ったら、ここは必ず実行される con.close(); } } catch (SQLException ex) { System.out.println("SQLException: " + ex.getMessage()); System.out.println("SQLState: " + ex.getSQLState()); System.out.println("VendorError: " + ex.getErrorCode()); // 接続できない時 } } } 現在javaでmysqlに接続してDB内の検索や追加等を行うものを作成しています。 現状は入力されたものをDBに追加することまでできましたが 検索で 入力された値がDBの中に一致する、または部分一致したものを表示させるやり方がわかりません

    • ベストアンサー
    • Java
  • Postgresql JDBCのconnect error

    Vine Linux2.6, Tomcat5, Postgresql7.4.3の環境で、 簡単なDBへアクセスのJspを作りましたが、実行したら、次のエラーができましたが、解決方法を 教えてください。 JSP File: <HTML> <HEAD><TITLE>User List</TITLE></HEAD> <BODY> <%@ page import="java.sql.*" %> <TABLE BORDER=1 width="75%"> <TR><TH>UID</TH><TH>Password</TH></TR> <% Connection conn = null; Statement st = null; ResultSet rs = null; try { Class.forName("org.postgresql.Driver").newInstance(); conn = DriverManager.getConnection("jdbc:postgresql://xxx.xxxx.xx.xx:8080/webshop","postgres","xxxx"); st = conn.createStatement(); rs = st.executeQuery("select * from tbllogin"); while(rs.next()) { %> <TR><TD><%= rs.getString("fldlogid") %></TD> <TD><%= rs.getString("fldpwd") %></TD></TR> <% } %> </TABLE> <% } catch (Exception ex) { ex.printStackTrace(); %> </TABLE> Ooops, something bad happened: <% } finally { if (rs != null) rs.close(); if (st != null) st.close(); if (conn != null) conn.close(); } %> </BODY> </HTML> Tomcat5のログcatalina.out: org.postgresql.util.PSQLException: The backend has broken the connection. Possibly the action you have attempted has caused it to close. at org.postgresql.core.PGStream.ReceiveChar(PGStream.java:168) at org.postgresql.jdbc1.AbstractJdbc1Connection.openConnectionV3(AbstractJdbc1Connection.java:291) .....

  • DBサーバ上でjdbcによるアクセス方法について

    Oracle JDBC Driverのロードを以下のように行おうとしました。 import java.sql.*; class JavaDataAccess01 { public static void main (String args[]) throws SQLException, ClassNotFoundException { // Oracle JDBC Driverのロード Class.forName("oracle.jdbc.driver.OracleDriver"); // Oracle10gに接続 Connection conn = DriverManager.getConnection ("jdbc:oracle:thin:@localhost:1521:ORCL", "test", "test"); // ステートメントを作成 Statement stmt = conn.createStatement(); // 問合せの実行 ResultSet rset = stmt.executeQuery("select brand_id,value from brand"); // 問合せ結果の表示 while ( rset.next() ) { // 列番号による指定 System.out.println(rset.getInt(1) + "\t" + rset.getString(2)); } // 結果セットをクローズ rset.close(); // ステートメントをクローズ stmt.close(); // 接続をクローズ conn.close(); } } コンパイル後実行すると以下のように例外がでます。 Exception in thread "main" java.lang.ClassNotFoundException: oracle.jdbc.driver. OracleDriver at java.net.URLClassLoader$1.run(URLClassLoader.java:199) at java.security.AccessController.doPrivileged(Native Method) at java.net.URLClassLoader.findClass(URLClassLoader.java:187) at java.lang.ClassLoader.loadClass(ClassLoader.java:289) at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:274) at java.lang.ClassLoader.loadClass(ClassLoader.java:235) at java.lang.ClassLoader.loadClassInternal(ClassLoader.java:302) at java.lang.Class.forName0(Native Method) at java.lang.Class.forName(Class.java:141) at JavaDataAccess01.main(JavaDataAccess01.java:11) ちなみにコンパイルして作成したクラスファイルはJavaDataAccess01です。使用しているDBはoracle10gです。環境設定もCLASSPATHにD:\oracle\product\10.2.0\db_1\jdbc\lib\classes12.zipを追加しているのですがどうにもうまくいきません。どなたか解決方法がわかる方、ご教授お願いします。

  • 【Servletのエラーについて教えて下さい!】

    こんにちわ。いつもありがとうございます。 サーブレットをコンパイル後、実行するとHTTPのPOSTメソッドは、このURLではサポートされていません。 と表示されます。 前のJSPからはmethod="POST"にて送信しているのですが・・・ すみませんが、ご教授下さい! ソースは以下となります。 よろしくお願い致します! import javax.servlet.http.*; import java.sql.*; import java.io.*; public class EditingServlet extends HttpServlet { public void doPost(HttpServletRequest req, HttpServletResponse res) throws IOException { /*フィールドの宣言*/ Connection conn = null; res.setContentType("text/html; charset=Shift_JIS"); PrintWriter out = res.getWriter(); out.println("<html><head></head><body>"); String Str = req.getParameter( "Str" ); try { String user = "ID", pwd="PW"; Class.forName("com.microsoft.sqlserver.jdbc.SQLServerDriver"); String url="jdbc:sqlserver://10.121.67.247:1433;DatabaseName=Name"; /*JDBC URL*/ conn = DriverManager.getConnection(url,user,pwd); Statement stmt = conn.createStatement(); stmt.executeUpdate("UPDATE T_Strfer SET フラグ ='1' WHERE id='"+ Str +"'"); out.println("データを更新しました!<br>"); } catch (ClassNotFoundException e) { out.println("クラスが見つかりません。"); } catch (SQLException e) { out.println("データの更新に失敗しました。 "); } finally { try { if (conn != null) { conn.close(); } } catch (SQLException e) {} } out.println("</body></html>"); out.close(); } }

    • ベストアンサー
    • Java
  • MySQL JDBC エラー

    以下のJDBCでのエラーに悩まされています。 ご教授お願いします。 import java.sql.*; public class RootingM { public static void main(String[] args) { System.out.println( \"=> loading driver:\" ); Class.forName(\"com.mysql.jdbc.Driver\"); System.out.println(\"Ok\"); System.out.println( \"=> connecting:\" ); Connection con = null; con = DriverManager.getConnection(url, user, pass); System.out.println(\"Ok\"); Statement stmt = con.createStatement(); ~~~ 以下省略 ~~~ 【DOS プロンプト】 => loading driver: OK => connecting: java.sql.SQLException: Communication link failure: java.io.IOException, underlyi ng cause: Unexpected end of input stream ** BEGIN NESTED EXCEPTION ** java.io.IOException MESSAGE: Unexpected end of input stream STACKTRACE: java.io.IOException: Unexp

    • ベストアンサー
    • Java
  • JDBC接続について

    お世話になります。 MSDE2000にJDBCにて接続したいのですが、SQLExceptionが発生して接続できません。 JDBCドライバーはMSよりDLして、CLASSPATHに追加しております。 環境は OS:Win2K Pro JAVA:jdk1.3.1_18 です。 JAVAのソースは下記のとおりです。 import java.sql.*; import java.io.*; import java.util.*; public class SQLServerJDBCTest { public static void main(String[] args) { // ログインに必要な情報 String user = "sa"; //ユーザ名 String pass = "password"; //パスワード try { // ドライバクラスをロード Class.forName("com.microsoft.jdbc.sqlserver.SQLServerDriver"); // データベースへ接続 Connection con = DriverManager.getConnection ("jdbc:microsoft:sqlserver://127.0.0.1:1433",user,pass ); // ステートメントオブジェクトを生成 Statement stmt = con.createStatement(); // クエリーを実行して結果セットを取得 String sql = "SELECT GETDATE()"; ResultSet rs = stmt.executeQuery(sql); // 表示 while (rs.next()) { System.out.println(rs.getString(1)); } // データベースから切断 stmt.close(); con.close(); } catch (Exception e) { e.printStackTrace(); } } } おかしな点や追加設定等ありましたらご指摘ください。 (投稿文字制限でExceptionの内容が載せられませんでした。) また、MSDEのバージョン7に接続する場合、同じJDBCドライバーで、同じ設定でいいのでしょうか? よろしくお願いいたします。

  • jspのプログラムについて

    jspについて質問です。 現在入力されたパスワードとデータベースに保存してあるパスワードを比較して一緒であれば idを削除するというプログラムを組んでいます。 削除することはできないのですが、 比較がうまくいきません。 <% //postされたもの String id = request.getParameter("id"); String password =request.getParameter("password") Class.forName("com.mysql.jdbc.Driver"); Connection conn=DriverManager.getConnection(urlやpassword、userが書いてある); request.setCharacterEncoding("utf8"); Statement st=conn.createStatement(); Statement stmt=conn.createStatement(); ResultSet res = st.executeQuery("select * from data where id ="+id); while(res.next()){ String pass =res.getString("pass"); //データベースからパスワードを取得 out.println("<td>" + password + "</td>"); out.println("<td>" + pass + "</td>"); if(password==pass){ //入力されたパスワードと比較 //ここにはidを削除する文が書かれている } } st.close(); conn.close(); やっているのですが、if文に入って削除してくれません。 out.printlnはいりませんがちゃんと値があっているか確かめたところ 入力された文字とデータベースに入っている文字がちゃんと表示されました。 教えてください。よろしくお願いします。

  • javaの文字化けに困っています。

    改善方法はありますか。 public class daytime extends HttpServlet { protected String decodeString(String str){ try{ byte[] byteData = str.getBytes("ISO_8859_1"); str = new String(byteData, "Shift_JIS"); }catch(UnsupportedEncodingException e){ return null; } return str; } public void doGet(HttpServletRequest request ,HttpServletResponse response) response.setContentType("text/html;charset=Shift_JIS"); PrintWriter out = response.getWriter(); String tmp; String name = ""; tmp = request.getParameter("name"); Calendar cal = Calendar.getInstance(); out.println("<html lang=\"ja\" >"); out.println("<head>"); out.println("<title>ContextParam Example</title>"); out.println("<style>"); out.println("</style>"); out.println("<meta http-equiv=\"Content-Type\" Content=\"text/html;charset=Shift_JIS\">"); out.println("</head>"); out.println("<body>"); out.println("<table>"); out.println("<p>"); Connection conn = null; String url = "jdbc:mysql://localhost/list2"; String user = "list2"; String password = "list2"; out.println("</table>"); try { Class.forName("com.mysql.jdbc.Driver").newInstance(); out.println("Mysqlのロードに成功"); conn = DriverManager.getConnection(url, user, password); Statement stmt = conn.createStatement(); String sql = "SELECT * FROM goods"; ResultSet rs = stmt.executeQuery(sql); out.println("<table>"); while(rs.next()){ out.println("<tr>"); out.println("<td>" +rs.getInt("id") + "</td>"); out.println("<td>" +rs.getString("name") + "</td>"); out.println("<td>" +rs.getString("mail") + "</td>"); out.println("<td>" +rs.getInt("price") + "</td>"); out.println("<form method=\"GET\" action=\"./daytime3\">"); out.println("<input type=\"hidden\" name=\"id\" value=\""+ rs.getInt("id") + "\">"); out.println("<td><input type=\"submit\" value=\"更新\"></td>"); out.println("<td><input type=\"submit\" value=\"削除\"></td>"); out.println("</form>"); out.println("</tr>"); } out.println("</table>"); rs.close(); stmt.close(); } catch (ClassNotFoundException e){ out.println("ClassNotFoundException:" + e.getMessage()); }catch (SQLException e){ out.println("SQLException:" + e.getMessage()); } catch (Exception e){ out.println("Exception:" + e.getMessage()); }finally{ try{ if (conn != null){ conn.close(); out.println("DBに切断"); }else{ out.println("データベースの接続ない"); } }catch (SQLException e){ } } out.println("</p>"); out.println("<tr>"); out.println("</tr>"); out.println("<A HREF='/dddd/daytime2'>登録</A>"); out.println("<A HREF='/dddd/daytime5'>アンケート</A>"); out.println("<div style=\"font-size: 40px; text-align: center; font-weight: bold\">"); out.println(cal.get(Calendar.YEAR) + "/" + (cal.get(Calendar.MONTH) + 1) + "/" + cal.get(Calendar.DATE) + " " + cal.get(Calendar.HOUR_OF_DAY) + ":" + cal.get(Calendar.MINUTE)); out.println("</div>"); out.println("</body>"); out.println("</html>"); protected String decodeString(String str){ try{ byte[] byteData = str.getBytes("ISO_8859_1"); str = new String(byteData, "Shift_JIS"); }catch(UnsupportedEncodingException e){ return null; } return str; } } }