0
Java 프로젝트 용 SQLite 라이브러리로 SQLJet을 사용하여 테이블에 대한 인덱스를 생성하고이를 사용하여 데이터베이스에서 무언가를 얻습니다. 그리고 계속 오류가 발생하고 있습니다. 잘못하고있어. 내가 작성한 코드를 조금 바꿔서 (하나 이상의 테이블을 만들었지 만 별 의미가 없습니다.) 어떻게이 오류를 수정합니까?생성 된 인덱스를 찾을 수 없습니다
org.tmatesoft.sqljet.core.SqlJetException: Index not exists: FULL_NAME_INDEX: error code is MISUSE
at org.tmatesoft.sqljet.core.internal.table.SqlJetTable.checkIndexName(SqlJetTable.java:285)
at org.tmatesoft.sqljet.core.internal.table.SqlJetTable.access$300(SqlJetTable.java:46)
at org.tmatesoft.sqljet.core.internal.table.SqlJetTable$2.runWithLock(SqlJetTable.java:149)
at org.tmatesoft.sqljet.core.table.SqlJetDb$1.runSynchronized(SqlJetDb.java:172)
at org.tmatesoft.sqljet.core.table.engine.SqlJetEngine.runSynchronized(SqlJetEngine.java:217)
at org.tmatesoft.sqljet.core.table.SqlJetDb.runWithLock(SqlJetDb.java:170)
at org.tmatesoft.sqljet.core.internal.table.SqlJetTable.lookup(SqlJetTable.java:146)
at eureqapp.DatabaseManager.getContact(DatabaseManager.java:408)
내 코드 :
public DatabaseManager() throws SqlJetException, IOException
{
try
{
//Creates a database file, if it doesn't exist already.
File dbFile = new File(databaseFileName);
if (!dbFile.exists())
{
dbFile.createNewFile();
db = SqlJetDb.open(dbFile, true);
db.beginTransaction(SqlJetTransactionMode.WRITE);
db.getOptions().setUserVersion(1);
createTables();
} else
{
db = SqlJetDb.open(dbFile, true);
db.beginTransaction(SqlJetTransactionMode.WRITE);
db.getOptions().setUserVersion(1);
}
} catch (Exception e)
{
e.printStackTrace();
} finally
{
if (db.isOpen())
{
db.commit();
db.close();
}
}
}
public static void createTables() throws SqlJetException
{
try
{
if (!db.isOpen())
{
db.open();
}
db.beginTransaction(SqlJetTransactionMode.WRITE);
db.createTable(CREATE_TABLE_CONTACT);
db.createIndex(CREATE_CONTACT_NAME_INDEX);
} catch (Exception e)
{
e.printStackTrace();
} finally
{
if (db.isOpen())
{
db.commit();
db.close();
}
}
}
은 내가
public static Contact getContact(String name) throws SqlJetException
{
Contact c = new Contact();
try
{
if (!db.isOpen())
{
db.open();
}
db.beginTransaction(SqlJetTransactionMode.READ_ONLY);
ISqlJetTable table = db.getTable("CONTACT");
ISqlJetCursor cursor = table.lookup("FULL_NAME_INDEX", name);
String contactName = cursor.getString("name");
String contactAddress = cursor.getString("address");
String contactPlace = cursor.getString("place");
String contactDepartment = cursor.getString("department");
String contactTelephone = cursor.getString("telephone_number");
String contactMobile = cursor.getString("mobile_number");
String contactEmail = cursor.getString("email_address");
cursor.close();
db.close();
c = new Contact(contactName, contactAddress, contactPlace, contactDepartment, contactTelephone, contactMobile, contactEmail);
return c;
} catch (Exception e)
{
e.printStackTrace();
}
return null;
}
이것은 모두 동일한 실행 응용 프로그램 내에서 수행되며 데이터베이스가 단일 사용자에 의해 사용되는 것으로 알고 있습니다. 인덱스를 사용하지 않는 다른 모든 쓰기/읽기 메소드는 작동합니다. – user1810737