1

こんにちは、私は写真を撮り、phonegap/jQuery/html5 を使用してデータベースに保存するプロジェクトに取り組んでいます。データベース エントリには、地理位置情報と、カメラが撮影した画像の BLOB を格納する必要があります。これは私がこれを行うために使用している現在の方法であり、うまくいきません。BLOB は常に挿入ステートメントを壊します。画像データの代わりに smallImage を「1」に設定すると、正常に動作します。このブロブを挿入するより良い方法はありますか? ログを見ると、smallImage が切れているように見えます。

var cameraLat;
var cameraLong;
var cameraTimestamp;
var destinationType;
var cameraLocationID;

function onGeoSuccess(position) {
    cameraLat = position.coords.latitude;
    console.log(cameraLat);
    cameraLong = position.coords.longitude;
    console.log(cameraLong);
    cameraTimestamp = position.timestamp;
    console.log(cameraTimestamp);
}

function geoFail(position) {
    alert('code: '    + error.code    + '\n' +
            'message: ' + error.message + '\n');
}

function onPhotoDataSuccess(imageData) {                
   // Get image handle 
    navigator.geolocation.getCurrentPosition(onGeoSuccess, geoFail);
    var smallImage = imageData;
    var Latitude = cameraLat;
    var longitude = cameraLong;
    var timestamp = cameraTimestamp;
    var LID = cameraLocationID;
    console.log(Latitude); //working
    console.log(longitude); //working
    console.log(timestamp); //working
    console.log(smallImage); // This cuts out and breaks my insert. 
    var db = window.openDatabase("MobilePhotos", "1.0", "MobilePhotosData", 1000000);   
    db.transaction(function (tx) {tx.executeSql('INSERT INTO Photos(PhotoID, PictureFile, Longitude, Latitude, Timestamp ) VALUES( '+ timestamp+LID+' ,' + smallImage + '", ' +  longitude +', '+ Latitude +', "'+ timestamp +'")')})
}


function take_pic(LocationID) {
    cameraLocationID=LocationID;
    navigator.camera.getPicture(onPhotoDataSuccess, function(ex) {alert("Camera Error!");}, { quality : 50, destinationType: Camera.DestinationType.DATA_URL });
}

BLOB を入力しようとすると、次のエラーが表示されます。

02-05 16:10:19.702: W/System.err(12028): 
android.database.sqlite.SQLiteException: 
no such column: undefined (code 1): , while compiling:
INSERT INTO OrderPhotos(PhotoID, PictureFile, Longitude, Latitude, Timestamp ) 
VALUES( 1904010821 , "/9j/4AAQSkZJRgABAQAAAQABAAD/2wBDABsS..(3825 characters) 

しかし、残りのフィールドは表示されません。何かが二重引用符を壊している可能性がありますか? それともここで何か他のことが起こっていますか?

smallImage に「1」を入力すると、出力は正常に機能します。

INSERT INTO OrderPhotos(PhotoID, PictureFile, Longitude, Latitude, Timestamp ) 
VALUES( 1904010821 , "1", 39.10, -84.50, 190401082)
4

1 に答える 1

3

演算子を使用してみましたか?

db.transaction(function(tx) {
  tx.executeSql("INSERT INTO OrderPhotos(PhotoID, PictureFile, Longitude, 
                  Latitude, Timestamp ) VALUES
                 ( 1904010821 , ? , 39.10, -84.50, 190401082)", 
   [PictureFile],
   function(tx, res) {
      ....
  });
 });

演算子?は、文字列の連結を使用するよりも優れています。

あなたの例で:

    db.transaction(function (tx) 
{tx.executeSql('INSERT INTO Photos(PhotoID, PictureFile, Longitude, Latitude, Timestamp ) 
VALUES( ?,?,?,?,?)')},[photoid, small photo, longitud, latitude, timestamp])}

それぞれ?同じ順序で各変数に対応します。

于 2013-02-26T21:53:55.370 に答える