Я пытаюсь пример в java с помощью Mysql, Hibernate. Я создал 2 таблицы в Mysql с именем table1, table2. Каждый из них имеет 3 столбца table1
. rowindex
, table1
. column1
, table1
. column2
table2
. rowindex
, table2
. column1
, table2
. column2
Сцена равна 1. Иногда значение table1.column1 равно table2.column2. 2. Он найдет значение table1.column2.
Поэтому запрос, который я использовал
SELECT a.column1, b.column1, a.column2, b.column2 FROM table1 a, table2 b where a.column1 = b.column1 and a.column2 ='Mandar';
Он показывает мне точный результат в Workbench Mysql. Затем я написал java-программу для получения этого результата и попытался его распечатать.
Я написал функцию извлечения таблицы следующим образом:
protected static List get_combined_two_tables(String string) {
if (resultList != null) {
resultList.clear();
}
flag_file = filecheckhibernate1(false);
if (flag_file) {
session = HibernateUtil.getSessionFactory("hibernate1.cfg.xml").openSession();
if (session != null) {
if (session.isOpen() == true) {
try {
session.beginTransaction();
} catch (TransactionException e) {
e.printStackTrace();
} catch (JDBCConnectionException e) {
e.printStackTrace();
}
String selectQuery = "SELECT a.column1, b.column1, a.column2, b.column2 FROM table1 a, table2 b where a.column1 = b.column1 and a.column2 =:name";
System.out.println("selectQuery = " + selectQuery);
Query q = null;
try {
q = session.createQuery(selectQuery);
q.setString("name", "Mandar");
} catch (org.hibernate.QueryException e) {
e.printStackTrace();
}
if (q != null) {
resultList = q.list();
session.getTransaction().commit();
}
if (session.isOpen()) {
session.close();
}
}
}
}
return resultList;
}
Для печати я написал следующую функцию: -
List<?> combined_table_List = null;
combined_table_List = get_combined_two_tables("Mandar");
if(combined_table_List != null) {
String[] dest = null;
for (int i = 0; i < combined_table_List.size(); i++) {
dest = new String[combined_table_List.get(i).toString().length()];
if(dest != null) {
try {
System.arraycopy(combined_table_List,0,dest,0,combined_table_List.get(i).toString().length());
} catch (Exception e) {
e.printStackTrace();
}
if(Arrays.toString(dest) != null) {
System.out.println("Arrays.toString(dest) ="+Arrays.toString(dest));
}
}
}
}
Когда я запускаю программу, я получаю исключение:
java.lang.ArrayStoreException
at java.lang.System.arraycopy(Native Method)
at test_db$1.run(test_db.java:132)
at java.awt.event.InvocationEvent.dispatch(Unknown Source)
at java.awt.EventQueue.dispatchEventImpl(Unknown Source)
at java.awt.EventQueue.access$500(Unknown Source)
at java.awt.EventQueue$3.run(Unknown Source)
at java.awt.EventQueue$3.run(Unknown Source)
at java.security.AccessController.doPrivileged(Native Method)
at java.security.ProtectionDomain$JavaSecurityAccessImpl.doIntersectionPrivilege(Unknown Source)
at java.awt.EventQueue.dispatchEvent(Unknown Source)
at java.awt.EventDispatchThread.pumpOneEventForFilters(Unknown Source)
at java.awt.EventDispatchThread.pumpEventsForFilter(Unknown Source)
at java.awt.EventDispatchThread.pumpEventsForHierarchy(Unknown Source)
at java.awt.EventDispatchThread.pumpEvents(Unknown Source)
at java.awt.EventDispatchThread.pumpEvents(Unknown Source)
at java.awt.EventDispatchThread.run(Unknown Source)
Arrays.toString(dest) =[null, null, null, null, null, null, null, null,
null, null, null, null, null, null, null, null, null, null, null, null,
null, null, null, null, null, null, null, null]
Нужна помощь, чтобы решить эту проблему.
Список, возвращаемый вашим get_combined_two_tables, будет представлять собой список массивов объектов, каждый массив будет представлять строку, возвращаемую вашим запросом.
Когда вы затем попытаетесь скопировать этот список в свою "dest" String [], это завершится неудачно, потому что два типа несовместимы. т.е. вы пытаетесь вставить список объектов в массив строк.
Вам нужно проанализировать массив Object в вашем списке в массив строк.