2013-07-30 2 views
1

У меня есть небольшое приложение для базы данных. Он требует, чтобы пользователь вводил код 1A1, например, для поиска Db.извлекать данные из android sqlite с использованием пользовательского ввода

Если я буду жестко закодировать команду sql, она найдет эту строку.

Cursor c=db.rawQuery("SELECT * from emdcode WHERE code = '1A1'",null); 

На моем макете у меня есть текстовое поле для ввода пользователя

 <EditText 
    android:id="@+id/codelookup" 
    android:layout_width="wrap_content" 
    android:layout_height="wrap_content" 
    android:layout_alignBaseline="@+id/textView1" 
    android:layout_alignBottom="@+id/textView1" 
    android:layout_alignParentRight="true" 
    android:layout_toRightOf="@+id/button3" 
    android:ems="10" > 
    <requestFocus /> 
    </EditText> 

Мой вопрос> Как написать SQL для поиска пользовательского ввода?

Я сделал это в Java

 private void SrchCodeActionPerformed(java.awt.event.ActionEvent evt) 

{

String sql = "SELECT * FROM emdcodes WHERE Codes like ?"; 

     try 
{ 
ps = conn.prepareStatement(sql);  
    ps.setString(1, EMDCODELOOKUP.getText() + "%");   
    rs = ps.executeQuery(); 
    ResultsTable.setModel(DbUtils.resultSetToTableModel(rs));  
    } 

catch (Exception e) 
{ 
JOptionPane.showMessageDialog(null, e); 
    } 
     } 

Так что я assumned SQLite подобен

Я попытался

 Cursor c=db.rawQuery("SELECT * from emdcode WHERE code = codelookup",null); 

     Cursor c=db.rawQuery("SELECT * from emdcode WHERE code = ?",null); 

Любые предложения или guidemnce бы быть Великий. Спасибо

обновление

При использовании курсора с = db.rawQuery ("SELECT * из emdcode WHERE код =?", Новый String [] { "codelookup"}); Я получаю нулевой набор результатов. Это файл LogCat:

07-31 00:10:34.735: E/Trace(1765): error opening trace file: No such file or directory (2) 

07-31 00: 10: 38,645: E/AndroidRuntime (1765): FATAL ИСКЛЮЧЕНИЕ: главный 07-31 00: 10: 38,645: E/AndroidRuntime (1765): java.lang.IllegalStateException: Не удалось выполнить способ действия 07-31 00: 10: 38.645: E/AndroidRuntime (1765): at android.view.View $ 1.onClick (View.java:3599) 07-31 00: 10: 38.645: E/AndroidRuntime (1765): at android.view.View.performClick (View.java:4204) 07-31 00: 10: 38.645: E/AndroidRuntime (1765): at android.view. Просмотреть $ PerformClick.run (View.java:17355) 07-31 00: 10: 38.645: E/AndroidRuntime (1765): at android.os.Handler.handleCallback (Handler.java:725) 07-31 00: 10: 38.645: E/AndroidRuntime (1765): at android.os.Handler.dispatchMessage (Handler.java:92) 07-31 00: 10: 38.645: E/AndroidRuntime (1765): у android .os.Looper.loop (Looper.java:137) 07-31 00: 10: 38.645: E/AndroidRuntime (1765): at android.app.ActivityThread.main (ActivityThread.java:5041) 07-31 00 : 10: 38.645: E/AndroidRuntime (1765): at java.lang.reflect.Method.invokeNative (собственный способ) 07-31 00: 10: 38.645: E/AndroidRuntime (1765): at java.lang.reflect. Method.invoke (Method.java:511) 07-31 00: 10: 38.645: E/AndroidRuntime (1765): at com.android.internal.os.ZygoteInit $ MethodAndArgsCaller.run (ZygoteInit.java:793) 07 -31 00: 10: 38.645: E/AndroidRuntime (1765): at com.android.internal.os.ZygoteInit.main (ZygoteInit.java:560) 07-31 00: 10: 38.645: E/AndroidRuntime (1765) : a t dalvik.system.NativeStart.main (родной метод) 07-31 00: 10: 38.645: E/AndroidRuntime (1765): вызвано: java.lang.reflect.InvocationTargetException 07-31 00: 10: 38.645: E/AndroidRuntime (1765): at java.lang.reflect.Method.invokeNative (собственный способ) 07-31 00: 10: 38.645: E/AndroidRuntime (1765): at java.lang.reflect.Method.invoke (метод. java: 511) 07-31 00: 10: 38.645: E/AndroidRuntime (1765): at android.view.View $ 1.onClick (View.java:3594) 07-31 00:10:38.645: E/AndroidRuntime (1765): ... 11 далее 07-31 00: 10: 38.645: E/AndroidRuntime (1765): вызвано: java.lang.IllegalArgumentException: значение привязки в индексе 1 равно 07 -31 00: 10: 38.645: E/AndroidRuntime (1765): at android.database.sqlite.SQLiteProgram.bindString (SQLiteProgram.java:164) 07-31 00: 10: 38.645: E/AndroidRuntime (1765): at android.database.sqlite.SQLiteProgram.bindAllArgsAsStrings (SQLiteProgram.java:200) 07-31 00: 10: 38.645: E/AndroidRuntime (1765): at android.database.sqlite.SQLiteDirectCursorDriver.query (SQLiteDirectCursorDriver.java:47) 07-31 00: 10: 38.645: E/AndroidRuntime (1765): at android.database.sqlite.SQLiteDatabase.rawQueryWithFactory (SQLiteDatabase.java:1314) 07-31 00: 10: 38.645: E/AndroidRuntime (1765) : at android.database.sqlite.SQLiteDatabase.rawQuery (SQLiteDatabase.java:125 3) 07-31 00: 10: 38.645: E/AndroidRuntime (1765): at com.example.studentdatabase.MainActivity.showdata (MainActivity.java:47) 07-31 00: 10: 38.645: E/AndroidRuntime (1765): ... 14 далее 07-31 00: 11: 55.095: E/Trace (1839): файл с открытием ошибки: нет такого файла или каталога (2) 07-31 00: 20: 08.084: E/Trace (2020): файл с открытием ошибки: нет такого файла или каталога (2) 07-31 00: 20: 16.915: E/AndroidRuntime (2020): FATAL EXCEPTION: main 07-31 00: 20: 16.915: E/AndroidRuntime (2020): java.lang.IllegalStateException: не удалось выполнить метод активности 07-31 00: 20: 16.915: E/AndroidRuntime (2020): at android.view.View $ 1.onClick (View.java: 3599) 07-31 00: 20: 16.915: E/AndroidRuntime (2020): at android.view.View.performClick (View.java:4204) 07-31 00: 20: 16.915: E/AndroidRuntime (2020): на android.view.View $ PerformClick.run (View.java:17355) 07-31 00: 20: 16.915: E/AndroidRuntime (2020) : at android.os.Handler.handleCallback (Handler.java:725) 07-31 00: 20: 16.915: E/AndroidRuntime (2020): at android.os.Handler.dispatchMessage (Handler.java:92) 07 -31 00: 20: 16.915: E/AndroidRuntime (2020): at android.os.Looper.loop (Looper.java:137) 07-31 00: 20: 16.915: E/AndroidRuntime (2020): на android. app.ActivityThread.main (ActivityThread.java:5041) 07-31 00: 20: 16.915: E/AndroidRuntime (2020): at java.lang.reflect.Method.invokeNative (собственный метод) 07-31 00:20 : 16.915: E/AndroidRuntime (2020): at java.lang.reflect.Method.invoke (Method.java:511) 07-31 00: 20: 16.915: E/AndroidRuntime (2020): at com.android.int ernal.os.ZygoteInit $ MethodAndArgsCaller.run (ZygoteInit.java:793) 07-31 00: 20: 16.915: E/AndroidRuntime (2020): at com.android.internal.os.ZygoteInit.main (ZygoteInit.java: 560) 07-31 00: 20: 16.915: E/AndroidRuntime (2020): at dalvik.system.NativeStart.main (родной метод) 07-31 00: 20: 16.915: E/AndroidRuntime (2020): вызвано : java.lang.reflect.InvocationTargetException 07-31 00: 20: 16.915: E/AndroidRuntime (2020): at java.lang.reflect.Method.invokeNative (собственный метод) 07-31 00: 20: 16.915: E/AndroidRuntime (2020): at java.lang.reflect.Method.invoke (Method.java:511) 07-31 00: 20: 16.915: E/AndroidRuntime (2020): at android.view.View $ 1.onClick (View.java:3594) 07-31 00: 20: 16.915: E/AndroidRuntime (2020): ... 11 еще 07-31 00: 20: 16.915: E/AndroidR untime (2020): вызвано: java.lang.IllegalArgumentException: значение привязки в индексе 1 равно 07-31 00: 20: 16.915: E/AndroidRuntime (2020): at android.database.sqlite.SQLiteProgram.bindString (SQLiteProgram.java:164) 07-31 00: 20: 16.915: E/AndroidRuntime (2020): at android.database.sqlite.SQLiteProgram.bindAllArgsAsStrings (SQLiteProgram.java:200) 07-31 00: 20: 16.915: E/AndroidRuntime (2020): at android.database.sqlite.SQLiteDirectCursorDriver.query (SQLiteDirectCursorDriver.java:47) 07-31 00: 20: 16.915: E/AndroidRuntime (2020): at android.database.sqlite.SQLiteDatabase. rawQueryWithFactory (SQLiteDatabase.java:1314) 07-31 00: 20: 16.915: E/AndroidRuntime (2020): at android.database.sqlite.SQLiteDatabase.rawQuery (SQLiteDatabase.java:1253) 07-31 00:20: 16.915: E/AndroidRuntime (2020): в com.example.studentdatabase.MainActivity.showdata (MainActivity.java:47) 07-31 00: 20: 16.915: E/AndroidRuntime (2020): ... 14 далее 07-31 00: 32: 07.675: E/Trace (2296) : файл с открытием ошибки: нет такого файла или каталога (2) 07-31 00: 33: 22.405: E/Trace (2377): файл с открытием ошибки: нет такого файла или каталога (2)

ответ

1

Вы можете попробовать это:

public Cursor GetData(String Code) throws Exception 
    { 
     Cursor cursor; 

     cursor = this.db.query("emdcode",null, "code = "+Code, null, null, null, null,null); 

     return cursor; 
    } 

или

public Cursor GetData(String Code) throws Exception 
    { 
     Cursor cursor; 

     cursor = this.db.query("emdcode",null, "code = ?", new String[]{code}, null, null, null,null); 

     return cursor; 
    } 
1

Попробуйте.

Cursor c=db.rawQuery("SELECT * from emdcode WHERE code = ?", new String[]{theStringYouWantToSearchForHere}); 

У вас почти было это, когда вы использовали?. Второй аргумент должен быть строковым массивом для аргументов where.

Если вы посмотрите на LogCat,

Caused by: java.lang.IllegalArgumentException: the bind value at index 1 is null 

означает, что строка вы разбор в массив имеет нулевое значение, в результате аварии

Если вы положили

String search = "1A1"; 
Cursor c=db.rawQuery("SELECT * from emdcode WHERE code = ?", new String[]{search}); 

Это должно сработать.

Это означает, что вы не инициализируете свое значение поиска, прежде чем вы вызовете этот метод (скорее всего).

Edit: Для редактирования текста

Вы хотите получить текстовое значение редактирования. Что-то вроде

EditText codelookup = (EditText) ActivityName.this.findViewById(R.id.codelookup); 
String search = codelookup.getText().toString(); 

Обратите внимание, что здесь я предполагаю, что вы находитесь внутри деятельности для findViewById. Если вы собираетесь использовать это много, я предлагаю вам иметь editTextFor codelookup как переменную класса. Там, где вам только нужно будет найти его один раз (обратите внимание, что вам нужно будет иметь findViewById после setContentView()).

+0

Может быть, я не совсем понимаю, были струнный откуда. – user2326872

+0

Возможно, я не совсем понимаю, откуда взялась строка. Я пробовал? ", Новый String [] {'" + codelookup + "'}), я попытался =" @ + id/codelookup. Я все время получаю сообщение об ошибке - неудивительно, что приложение для поиска кода прекратилось. какие-либо предложения?? – user2326872

+0

Можете ли вы отправить логарифм, который вы получите, когда он сработает? – Nicholas

Смежные вопросы