我已经搜索了答案,到目前为止没有运气。
我正试图在Android Kit Kat的SQLite中运行一个语句,并得到以下堆栈跟踪:
08-08 10:23:27.899: E/com.corrisoft.air.db.AirDatabaseAdapter(32532): Error while trying to create table:settings
08-08 10:23:27.899: E/com.corrisoft.air.db.AirDatabaseAdapter(32532): android.database.sqlite.SQLiteException: near "/": syntax error (code 1): , while compiling: CREATE TABLE settings (
08-08 10:23:27.899: E/com.corrisoft.air.db.AirDatabaseAdapter(32532): id CHAR(36) PRIMARY KEY,
08-08 10:23:27.899: E/com.corrisoft.air.db.AirDatabaseAdapter(32532): row_id TINYINT(1) NOT NULL DEFAULT 1,
08-08 10:23:27.899: E/com.corrisoft.air.db.AirDatabaseAdapter(32532): device_id CHAR(36) DEFAULT NULL,
08-08 10:23:27.899: E/com.corrisoft.air.db.AirDatabaseAdapter(32532): username VARCHAR(100) NOT NULL,
08-08 10:23:27.899: E/com.corrisoft.air.db.AirDatabaseAdapter(32532): password VARCHAR(45) NOT NULL,
08-08 10:23:27.899: E/com.corrisoft.air.db.AirDatabaseAdapter(32532): timezone VARCHAR(64),
08-08 10:23:27.899: E/com.corrisoft.air.db.AirDatabaseAdapter(32532): timezones_updated TINYINT(1) NOT NULL DEFAULT 0,
08-08 10:23:27.899: E/com.corrisoft.air.db.AirDatabaseAdapter(32532): device_bluetooth_identifier VARCHAR(64),
08-08 10:23:27.899: E/com.corrisoft.air.db.AirDatabaseAdapter(32532): log_debug TINYINT(1),
08-08 10:23:27.899: E/com.corrisoft.air.db.AirDatabaseAdapter(32532): gps_interval INTEGER NOT NULL DEFAULT 3,
08-08 10:23:27.899: E/com.corrisoft.air.db.AirDatabaseAdapter(32532): gps_threshold FLOAT NOT NULL DEFAULT 50,
08-08 10:23:27.899: E/com.corrisoft.air.db.AirDatabaseAdapter(32532): gps_trigger_speed FLOAT NOT NULL DEFAULT 2,
08-08 10:23:27.899: E/com.corrisoft.air.db.AirDatabaseAdapter(32532): checkin_interval INTEGER NOT NULL DEFAULT 2,
08-08 10:23:27.899: E/com.corrisoft.air.db.AirDatabaseAdapter(32532): checkin_timeout LONG NOT NULL DEFAULT 20,
08-08 10:23:27.899: E/com.corrisoft.air.db.AirDatabaseAdapter(32532): gps_submission_interval INTEGER NOT NULL DEFAULT 20,
08-08 10:23:27.899: E/com.corrisoft.air.db.AirDatabaseAdapter(32532): gps_timeout LONG NOT NULL DEFAULT 20,
08-08 10:23:27.899: E/com.corrisoft.air.db.AirDatabaseAdapter(32532): log_file TEXT NOT NULL DEFAULT ''/storage/sdcard0/AIR.log'',
08-08 10:23:27.899: E/com.corrisoft.air.db.AirDatabaseAdapter(32532): webservice_url TEXT NOT NULL DEFAULT ''http://air-test.corrisoft.com/webservices'',
08-08 10:23:27.899: E/com.corrisoft.air.db.AirDatabaseAdapter(32532): log_pattern TEXT NOT NULL DEFAULT ''%date | %-5level | %thread | %logger{0} | %msg%n'',
08-08 10:23:27.899: E/com.corrisoft.air.db.AirDatabaseAdapter(32532): phone_callcenter VARCHAR(10) NOT NULL DEFAULT ''8553500526''
08-08 10:23:27.899: E/com.corrisoft.air.db.AirDatabaseAdapter(32532): );
08-08 10:23:27.899: E/com.corrisoft.air.db.AirDatabaseAdapter(32532): at android.database.sqlite.SQLiteConnection.nativePrepareStatement(Native Method)
08-08 10:23:27.899: E/com.corrisoft.air.db.AirDatabaseAdapter(32532): at android.database.sqlite.SQLiteConnection.acquirePreparedStatement(SQLiteConnection.java:882)
08-08 10:23:27.899: E/com.corrisoft.air.db.AirDatabaseAdapter(32532): at android.database.sqlite.SQLiteConnection.prepare(SQLiteConnection.java:493)
08-08 10:23:27.899: E/com.corrisoft.air.db.AirDatabaseAdapter(32532): at android.database.sqlite.SQLiteSession.prepare(SQLiteSession.java:588)
08-08 10:23:27.899: E/com.corrisoft.air.db.AirDatabaseAdapter(32532): at android.database.sqlite.SQLiteProgram.<init>(SQLiteProgram.java:58)
08-08 10:23:27.899: E/com.corrisoft.air.db.AirDatabaseAdapter(32532): at android.database.sqlite.SQLiteStatement.<init>(SQLiteStatement.java:31)
08-08 10:23:27.899: E/com.corrisoft.air.db.AirDatabaseAdapter(32532): at android.database.sqlite.SQLiteDatabase.executeSql(SQLiteDatabase.java:1663)
08-08 10:23:27.899: E/com.corrisoft.air.db.AirDatabaseAdapter(32532): at android.database.sqlite.SQLiteDatabase.execSQL(SQLiteDatabase.java:1594)
08-08 10:23:27.899: E/com.corrisoft.air.db.AirDatabaseAdapter(32532): at test.corrisoft.InMemoryDatabase.execSQL(InMemoryDatabase.java:29)
08-08 10:23:27.899: E/com.corrisoft.air.db.AirDatabaseAdapter(32532): at com.corrisoft.air.db.AirDatabaseAdapter.checkTable(AirDatabaseAdapter.java:125)
08-08 10:23:27.899: E/com.corrisoft.air.db.AirDatabaseAdapter(32532): at com.corrisoft.air.db.AirDatabaseAdapter.updateDatabaseToMatchDefinition(AirDatabaseAdapter.java:110)
08-08 10:23:27.899: E/com.corrisoft.air.db.AirDatabaseAdapter(32532): at com.corrisoft.air.app.SettingsDAO.<init>(SettingsDAO.java:133)
08-08 10:23:27.899: E/com.corrisoft.air.db.AirDatabaseAdapter(32532): at com.corrisoft.air.app.SettingsDAOTest$1.<init>(SettingsDAOTest.java:26)
08-08 10:23:27.899: E/com.corrisoft.air.db.AirDatabaseAdapter(32532): at com.corrisoft.air.app.SettingsDAOTest.setUp(SettingsDAOTest.java:26)
08-08 10:23:27.899: E/com.corrisoft.air.db.AirDatabaseAdapter(32532): at junit.framework.TestCase.runBare(TestCase.java:132)
08-08 10:23:27.899: E/com.corrisoft.air.db.AirDatabaseAdapter(32532): at junit.framework.TestResult$1.protect(TestResult.java:115)
08-08 10:23:27.899: E/com.corrisoft.air.db.AirDatabaseAdapter(32532): at junit.framework.TestResult.runProtected(TestResult.java:133)
08-08 10:23:27.899: E/com.corrisoft.air.db.AirDatabaseAdapter(32532): at junit.framework.TestResult.run(TestResult.java:118)
08-08 10:23:27.899: E/com.corrisoft.air.db.AirDatabaseAdapter(32532): at junit.framework.TestCase.run(TestCase.java:124)
08-08 10:23:27.899: E/com.corrisoft.air.db.AirDatabaseAdapter(32532): at android.test.AndroidTestRunner.runTest(AndroidTestRunner.java:190)
08-08 10:23:27.899: E/com.corrisoft.air.db.AirDatabaseAdapter(32532): at android.test.AndroidTestRunner.runTest(AndroidTestRunner.java:175)
08-08 10:23:27.899: E/com.corrisoft.air.db.AirDatabaseAdapter(32532): at android.test.InstrumentationTestRunner.onStart(InstrumentationTestRunner.java:555)
08-08 10:23:27.899: E/com.corrisoft.air.db.AirDatabaseAdapter(32532): at android.app.Instrumentation$InstrumentationThread.run(Instrumentation.java:1584)
无论我首先放入哪个字符串文字,都会出现问题,所以这不是问题。想法?
答案 0 :(得分:1)
将双引号''
替换为常规单引号'
。
在SQL中,字符串文字位于'single quotes'
中。在字符串文字中,您可以将'
转义为''
,但在字符串文字之外,双引号是语法错误。