2017-09-13 80 views
-2

我想问问如何将多维数组存储到MySQL数据库。 例如我具有(X,Y)的阵列如何在java中将多维数组值存储到MySQL数据库中?

array[][] = { 
{3, 10}, 
{2, 11}, 
{4, 9}, 
} 

我试图使用preparedStatement时SETINT存储这些值来MySQL数据库但输出原来是这样的:

java.lang.ArrayIndexOutOfBoundsException: 3 

这是代码:

import java.sql.*; 
import java.util.logging.Level; 
import java.util.logging.Logger; 

public class InsertDB { 

    public static void main(String[] args) { 
     Connection conn = null; 
     Statement exe = null; 



    int[][] multiarray = { 
       {3, 10}, 
       {2, 11}, 
       {4, 9}, 
      }; 

     try { 
      Class.forName("com.mysql.jdbc.Driver"); 
      System.out.println("Connecting to the database"); 
      conn = DriverManager.getConnection("jdbc:mysql://localhost/finalproject","root",""); 
      System.out.println("Database connected"); 
      exe = conn.createStatement(); 

      conn.setAutoCommit(false); 
      PreparedStatement stmt = null; 
      stmt = conn.prepareStatement("INSERT INTO SIGNATURE (angle, distance) VALUES (?,?)"); 
      for (int i = 0; i < 10; i++) { 
       stmt.setInt(1, multiarray[i][0]); 
       stmt.setInt(2, multiarray[i][1]); 
       stmt.addBatch(); 
      } 

      stmt.executeBatch(); 
      conn.commit(); 

      System.out.println("Data added ! "); 
     } catch (ClassNotFoundException ex) { 
      Logger.getLogger(InsertDB.class.getName()).log(Level.SEVERE, null, ex); 
     } catch (SQLException ex) { 
      Logger.getLogger(InsertDB.class.getName()).log(Level.SEVERE, null, ex); 
     }finally{ 
      try{ 
       if (exe != null) 
        conn.close(); 
      }catch (SQLException se){ 

      }try{ 
       if(conn != null) 
        conn.close(); 
      }catch(SQLException se){ 

      } 
    } 
     System.out.println("Done !"); 
    } 

} 

有人能解决这个问题,

谢谢:)

+0

'有人可以解决这个问题'不除非你显示的代码失败... – marekful

+0

**阵列指数出界:** *** 3 *** – nullpointer

+0

你可以请分享你的代码? –

回答

0

您可以将数组转换为字符串,然后您可以保存。

0

异常的堆栈跟踪最有可能的点进去for循环和异常恕我直言相当精确地解释了这个问题:

你的阵列multiarray具有3x2的元素,即multiarray[0..2][0..1]。在你的循环中,你迭代i到10,并尝试访问multiarray[3][0] - 因为3是一个无效的索引,你会得到相应的异常,IndexOutOfBoundsException

确保你不会进一步遍历比你的数组的大小和你的代码工作正常:

for (int i = 0; i < multiarray.length; i++) { 
    stmt.setInt(1, multiarray[i][0]); 
    stmt.setInt(2, multiarray[i][1]); 
    stmt.addBatch(); 
    } 

BTW:你的问题意味着你想一个多维数组存储到一个单一的数据库字段。这在某些情况下可能是有意义的,但是这种情况很罕见,并且对它的支持很差或不标准化。

您所展示的代码并不是真的将多维数组存储到数据库中 - 您将单个整数存储到数据库表中。多维数组只是数据库表中数据在Java中的表示形式。

你可能想澄清你的问题。

+0

之上添加了我的代码,感谢您的回复。我试图改变循环multiarray.length,但它没有奏效,它给出了和以前一样的异常。上面的数组仅仅是一个例子。实际上我正在图像处理中进行形状检测。特征提取的输出是包含图像对象的{角度,距离}的多维数组。我想插入这些值到数据库,所以我可以检索到其他操作。你有什么解决方案吗?以前感谢:) – user2738592

相关问题